home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-01-07 | 139.7 KB | 3,582 lines |
- Sun Dec 31 10:47:51 1989 (tiemann at calvin)
-
- * cplus-cvt.c (build_up_reference): Take multiple inheritance into
- account in all (instead of just some) cases. Take virtual
- baseclasses into account in all (instead of no) cases.
-
- * cplus-init.c (build_vbase_delete): Convert ADDR before calling
- destructr. Otherwise privately derived baseclasses will give
- problems.
-
- * cplus-init.c (expand_aggr_init_1): Distinguish case where
- initializer list fails because virtual baseclass lacks default
- initializer and other bad argument lists.
-
- Sat Dec 30 13:09:43 1989 (tiemann at calvin)
-
- * cplus-tree.h (lang_type): Added bit for MARKED6. Used to use
- MARKED3 to mean `base class initialized', but that conflicts with
- use meaning `virtual baseclass processed' in cplus-search.c.
- * cplus-init.c (finish_base_init): Use _MARKED6 instead of
- _MARKED3 to indicate a baseclass has been initialized.
-
- * cplus-init.c (expand_aggr_init_1): If TYPE_HAS_CONSTRUCTOR(TYPE)
- but no constructor takes the initializer, and there is no X(X&)
- constructor, generate code for X(X&) constructor by hand.
-
- * cplus-typeck.c (build_modify_expr_1): Substantially simplified
- using assumption that LHS and RHS are type-compatible as a
- consequence of being elements of isomorphic structures.
-
- * cplus-init.c (expand_aggr_init): If EXP is initialized from
- an object of its same type, and EXP does not have an X(X&)
- constructor, have build_modify_expr do the work.
-
- Fri Dec 29 00:29:45 1989 (tiemann at calvin)
-
- * cplus-class.c (finish_struct): Don't build default functions by
- default. Instead, rely on compiler doing the Right Thing when
- handling INIT_EXPR and MODIFY_EXPR.
-
- * cplus-typeck.c (build_modify_expr): Don't copy virtual function
- table fields or virtual baseclass fields when performing
- memberwise copying.
- Instead, split `build_modify_expr' into two functions, a recursive
- form `build_modify_expr_1' which doesn't do any copying for
- virtual baseclasses, and a non-recursive form `build_modify_expr',
- which does handle these at top level.
-
- Thu Dec 28 12:37:37 1989 (tiemann at calvin)
-
- * cplus-decl.c (build_default_constructor): Typo--used
- DECL_VIRTUAL_P (...) when VFIELD_NAME_P (DECL_NAME (...)) was
- meant. Also, take into account fact that second arg might be "in
- charge" arg.
-
- * cplus-class.c (finish_base_struct): Move setting of
- TYPE_USES_VIRTUAL_BASECLASSES from here...
- * cplus-decl.c (xref_tag): ...to here. Needed because
- constructors for virtual baseclasses now need new type signatures.
-
- * cplus-decl2.c (grokclassfn): Rewrote code that inserts
- parameters so that SOS will work with virtual baseclasses.
- @@ But rest of SOS code must be changed to deal with this.
-
- * cplus-init.c (expand_aggr_vbase_init): Changed interface. Last
- arg is no longer FUNCTION_DECL, rather, it is the list of
- initializations that the constructor must perform (if in charge).
- All virtual baseclasses, whether they need constructors or not,
- will be initialized one way or another.
-
- * cplus-decl.c (finish_function): Don't do special things for
- constructors with virtual baseclasses. Leave that up to
- `finish_base_init'.
- * cplus-init.c (finish_stmt): Same change.
-
- * cplus-init.c (finish_base_init): Test "in charge" variable and
- conditionally do all virtual baseclass initialization.
-
- * cplus-class.c (build_method_call): New flag LOOKUP_HAS_IN_CHARGE
- which means that parameter list comes with the "in charge"
- parameter already set up. If the call is to a constructor, and
- this flag is not set, then say we are "in charge" iff constructor
- called is for new object.
- * cplus-init.c (expand_aggr_init_1): Add "in charge" parameter
- when appropriate, and set FLAGS in those cases.
-
- * cplus-method.c (fndecl_as_string): Don't print "in charge"
- variable when formatting constructors for objects with virtual
- baseclasses.
-
- * cplus-tree.h (lang_decl): Add bit for constructors which build
- objects with virtual baseclasses. These constructors take a new
- extra argument after the `this' pointer that says whether they are
- "in charge" of initializing virtual baseclass things or not.
- * cplus-decl2.c (grokclassfn): Set DECL_CONSTRUCTOR_WITH_VBASE_P
- bit when appropriate. Also, add extra parameter in that case.
- * All GNU C++ files: Change name of AUTO_DELETE_IDENTIFIER to
- IN_CHARGE_IDENTIFIER, since that is the correct generalization of
- its function, and thus allows the same identifier to be used in
- constructors and destructors.
-
- Thu Dec 21 12:58:05 1989 Michael Tiemann (tiemann at hudson)
-
- * cplus-init.c (expand_aggr_init): If initializing from a GNU C
- CONSTRUCTOR, consider the elts in the constructor as parameters to
- an implicit GNU C++ constructor.
-
- Wed Dec 20 10:45:46 1989 Michael Tiemann (tiemann at hudson)
-
- * cplus-decl.c (duplicate_decls): Don't know why I turned off
- propagation of DECL_IN_AGGR_P bit, but it needs to be
- on--otherwise we cannot catch duplicate method declarations in
- class scope. Was it turned off (erroneously) for efficiency
- reasons?
-
- * cplus-class.c (convert_harshness): Don't see two functions
- needing user-defined type conversions as ambiguous is one comes
- from immediate class, when the other comes from a base class.
-
- * cplus-decl.c (grokdeclarator): Don't permit storage class
- specifiers in parameter declarations.
-
- * cplus-typeck.c (mark_addressable): Say we're sorry if named
- return value much change from register to memory. Also, since
- TREE_ADDRESSABLE is checked at top, no need to recheck in various
- other parts.
- * cplus-cvt.c (build_up_reference): Same change.
-
- * stmt.c (expand_function_start): If function value is in a
- register, set TREE_REGDECL of the DECL_RESULT.
-
- * cplus-class.c (convert_harshness): Conversion of enum to int
- costs an extra penalty. Also, don't permit one kind of enum to
- convert to another.
-
- * cplus-search.c (dfs_pushdecls): Only set TREE_USED to zero for
- FIELD_DECLS. If we zero it out for e.g. VAR_DECLs, they won't get
- written out at end of file.
-
- Tue Dec 19 17:19:31 1989 Michael Tiemann (tiemann at hudson)
-
- * cplus-decl.c (finish_decl): If we are at top level and
- allocation is temporary, switch to permanent allocation before
- calling `grok_reference_init'. Also, initialization of references
- was losing when initializer was a constructor.
- @@ Problem that must be better solved: The compiler was confused
- about what NEW_EXPR meant--when it when looking for temp space for
- the reference, it was grabbing space from the file-level
- initialization function, not from static space. What's needed is
- objects which really know how to get the kind of space they are
- looking for when they are really expanded.
-
- * cplus-type2.c (build_functional_cast): Check that type is
- defined before testing various constructor bits.
-
- Thu Dec 14 15:14:12 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-tree.c (make_deep_copy,copy_to_permanent): New functions.
- * cplus-init.c (build_new): Dec 12 change was wrong. Instead,
- call copy_to_permanent if we need to stash away the initializer.
-
- Tue Dec 12 01:16:31 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-init.c (build_new): Check that INIT is not NULL_TREE
- before checking its permanence.
-
- * cplus-decl.c (decls_match): If TREE_TYPE (NEWDECL) is
- ERROR_MARK_NODE, don't call comptypes.
-
- * cplus-decl2.c (grokclassfn): Parameters for constructors with
- virtual baseclasses must be build on permanent_obstack.
-
- * cplus-parse.y (member_init): If using old-style member
- initialization for base class, remember to move allocation to the
- permaent_obstack before reading the initializer.
-
- * cplus-class.c (build_method_call): If global member function is
- good, record that fact in BEST. That way our early-out for member
- functions won't accidently call an inferior member function.
-
- * cplus-decl.c (grokdeclarator): If TREE_CODE (decl) ==
- ERROR_MARK, then silently continue processing, rather than
- aborting compilation.
-
- * cplus-parse.y (except_stmts): Call `expand_start_catch' and
- `expand_end_catch' instead of `expand_exit_except' when expanding
- default catch clause. Otherwise, we scream out to the next
- handler, not to the point after the handler.
-
- * cplus-class.c (build_overload_call): continue statement missing
- in TYPE_DECL case.
-
- Sat Dec 9 23:27:56 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-decl.c (xref_tag): Mark REF in addition to all its
- basetypes so we can protect against the user declaring recursive
- types by accident. Also fixed Braino in testing value of I after
- the BINFO loop.
-
- Thu Dec 7 16:37:28 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-search.c (dfs_record_inheritance): Check that MI_SIZE is
- nonzero before entering loop which uses it as stride.
-
- * cplus-typeck.c (build_component_ref_2): Make subroutine of code
- which builds the final COMPONENT_REF structure because it must be
- recursive in the case we have a field from a base class of a
- virtual base class.
-
- Wed Dec 6 08:05:59 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-class.c (build_scoped_method_call): Dec 2 introduced a bug
- by attempting to optimize tree node allocation. Fixed by always
- converting EXP.
-
- * cplus-decl.c (grokdeclarator): If TYPE becomes ERROR_MARK_NODE,
- and we are chasing down the declarator, must chase to TREE_OPERAND
- (DECLARATOR, 1) if TREE_CODE (DECLARATOR) is SCOPE_REF.
-
- * cplus-class.c (finish_struct): Change criterion for building
- init list from != CONST_DECL to == FIELD_DECL. Also, don't count
- a class as needing constructing or needing constructor based on
- static members.
-
- * cplus-init.c (expand_vec_init): Call itself recursively with
- FROM_ARRAY nonzero if TREE_TYPE (init) is same as TREE_TYPE (exp).
- Also, if coming FROM_ARRAY, only call `expand_aggr_init' if there
- is a constructor to call. Otherwise, call `expand_assignment'.
-
- * cplus-class.c (finish_struct): Can't have a default constructor
- if the class has reference types without default initial values.
-
- * cplus-tree.h (TYPE_RAISES_EXCEPTIONS): Use TYPE_NAME instead of
- (tree) TYPE_LANG_SPECIFIC.
- * cplus-decl.c (duplicate_decls): Now TYPE_LANG_SPECIFIC implies
- IS_AGGR_TYPE always.
-
- * cplus-init.c (build_default_constructor): Don't build
- initializer for default members.
-
- * cplus-class.c (finish_struct): If FUNCTION_DECL has
- IDENTIFIER_ERROR_LOCUS set, then don't keep the function in the
- class. It is evil.
-
- * cplus-init.c (expand_member_init): Don't permit initialization
- of member from base class--unless baseclass is virtual and has no
- constructor.
- * cplus-init.c (member_init_ok_or_else): New function
- encapsulating this and other checks for validity of member
- initialization.
-
- * cplus-type2.c (build_functional_cast): Try going through type
- conversion function if no constructors apply.
-
- * cplus-typeck.c (c_expand_return): When returning a named return
- value, call `use_variable' on the result, in case it is in a
- register.
-
- * cplus-class.c (compute_conversion_costs): Don't warn about
- contravariance violations (or other problems) as a result of
- calling `comp_target_types' (via call to `instantiate_type').
-
- * cplus-init.c (expand_aggr_init): Check that INIT is nonzero
- before accessing its TREE_TYPE.
-
- Tue Dec 5 00:13:33 1989 Michael Tiemann (tiemann at arkesden)
-
- * integrate.c (copy_rtx_and_substitute): If we folded something
- completely into a constant, don't try to make it a legitimate
- memory reference out of it.
-
- * cplus-class.c (propagate_basetype_offsets): Forgot to set
- ASSOC_TYPE (ASSSOC) when building the new basetype.
-
- * cplus-init.c (expand_aggr_init): When initializing const array,
- turn off const bits during initialization. Otherwise constructor
- can't be called (since it is calling from const object to
- non-const member function).
-
- * cplus-method.c (build_overload_name): Set PARMTYPE to
- TYPE_MAIN_VARIANT (PARMTYPE) after extracting interesting bits.
-
- Mon Dec 4 04:56:08 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-decl.c (finish_decl): wrt Nov 14 change, only change
- DECL_NAME of TTYPE if DECL is not a FUNCTION_DECL. It screws up
- consing up of default functions.
- * cplus-decl.c (grokdeclarator): When replacing anonymous aggr
- names with reasonable aggr names, change the names of any default
- constructors and/or destructors.
-
- * cplus-tree.h (type_flags): Added bits for
- TREE_GETS_CONST_{ASSIGN,INIT}_REF.
- * cplus-decl.c (grok_{ctor,op}_properties): Set bits here.
- * cplus-class.c (finish_base_struct): Read bits here.
- * cplus-class.c (finish_struct): If
-
- * cplus-init.c (expand_vec_init): Implement copy initialization
- from one vector to another (to make X(X&) work if members
- are vectors of X). Added parameter FROM_ARRAY to signify this
- fact.
- * All callers changed.
-
- * cplus-decl.c (grokdeclarator): Test for validity of destructor
- declaration was too harsh. It was not allowing one to declare
- that a destructor from a base class had public visibility in the
- current class.
-
- * cplus-method.c (hack_identifier): Vestigial double TREE_VALUE.
- Now that we use baselinks, everything is one level of list.
-
- * expr.c (expand_builtin): Fixed for BUILTIN_SAVEREGS case, again.
- This time, loop was failing because there was only one insn being
- protected. Now, emit a note, so that loop terminates properly.
-
- * cplus-decl.c (build_default_constructor): Handle initialization
- of anonymous unions by bitwise copy.
- * cplus-init.c (finish_base_init): Handle wholesale initialization
- of anonymous unions, i.e., the whole union, rather than just any
- one member.
-
- Sun Dec 3 13:32:29 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-decl.c (grok_ctor_properties): Add argument CTYPE to say
- what class type we are grokking for.
-
- * All GNU C++ files: Changed tests against IS_AGGR_TYPE when test
- against TYPE_LANG_SPECIFIC tests the property in which we are
- interested.
-
- * cplus-decl.c (grok_ctor_properties): Notice whether constructor
- can be used as default constructor, i.e., X ().
- * cplus-class.c (base_info): Add new fields `needs_default_ctor'
- and `cant_have_default_ctor'. Set the former if any of the
- basetypes define a default constructor. Set the latter if and of
- the basetypes define constructors, but not the default
- constructor.
- * cplus-class.c (finish_struct): If NEEDS_DEFAULT_CTOR and not
- CANT_HAVE_DEFAULT_CTOR, then cons up a default constructor for T.
- * cplus-lex.c (cons_up_default_function): Handle this new kind of
- default constructor.
- * cplus-decl.c (finish_function): Ditto.
-
- * cplus-typeck.c (build_modify_expr): Change assignment to this
- from error to warning if FLAG_THIS_IS_VARIABLE.
-
- * cplus-class.c (finish_struct): Build default X(X&) constructor
- if there are *any* constructors, not just if there are inherited
- X(X&) constructors.
-
- * integrate.c (function_cannot_inline_p): Raise threshold from 3
- to 4, since we copy more NOTEs now.
-
- * cplus-decl.c (finish_function): If DECL_CONSTRUCTOR_P (FNDECL)
- and DECL_COMPILER_GENERATED_P (FNDECL), do the default thing for
- this constructor (memberwise initialization). Done by calling
- `build_default_constructor'.
- * cplus-decl.c (build_default_constructor): New function.
-
- * cplus-lex.c (cons_up_dtor_for_type): Change name to
- `cons_up_default_function'. Takes new argument KIND saying what
- kind of default function to build. Cons up destructor or X(X&)
- constructor depending on KIND.
- * cplus-init.c (expand_aggr_init_1): Test TYPE_HAS_INIT_REF, not
- TYPE_GETS_INIT_REF.
- * cplus-typeck.c (convert_for_initialization): Ditto. If !HAS,
- but GETS, then abort for now.
-
- * cplus-class.c (finish_base_struct): Propagate
- TYPE_GETS_ASSIGN_REF.
- * cplus-class.c (finish_struct): If TYPE_GETS_ASSIGN_REF (T)
- but not TYPE_HAS_ASSIGN_REF (T), then default.
- * cplus-decl.c (grok_ctor_properties): Set TYPE_HAS_INIT_REF along
- with TYPE_GETS_INIT_REF.
-
- * cplus-init.c (build_delete): Don't check PROTECT when converting
- the object to be destroyed from derived type to base type.
- Leave it up to whether the destructor is visible or not
- to make that decision.
-
- * cplus-typeck.c (actualparameterlist): New parameter FLAGS.
- * cplus-typeck.c (convert_for_initialization): Ditto.
- * cplus-cvt.c (convert_to_reference): Change PROTECT to FLAGS.
- * cplus-cvt.c (build_up_reference): Ditto.
- * All callers changed.
-
- * cplus-init.c (build_delete): When deleting members, use PROTECT
- rather than 1 as value for calling `build_delete' recursively.
-
- * cplus-decl2.c (grokfield): If the initializer winds up being
- `error_mark_node', wrap it in a NOP so `decl_constant_value' will
- do the right thing.
-
- * cplus-decl.c (grokparms): If default parameter needs
- type instantiation, do it.
-
- * cplus-typeck.c (build_modify_expr): Cast first expression in a
- COMPOUND_EXPR to VOID_TYPE_NODE to suppress warning from
- warn_if_unused_value.
-
- Sat Dec 2 16:57:52 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-class.c (build_scoped_method_call): Extra TREE_TYPE around
- TREE_TYPE (decl) in two places. Improved comments. Make DECL be
- consistently of aggregate type.
-
- * cplus-tree.h (lang_type): `type_flags' substructure was not
- multiple of 4 bytes.
-
- Fri Dec 1 05:08:57 1989 Michael Tiemann (tiemann at arkesden)
-
- * integrate.c (try_fold_cc0): Argument to `emit_jump' was wrong:
- called with LABEL_REF rtx instead of underlying CODE_LABEL.
-
- * cplus-class.c (add_virtual_function): Handle case where virtual
- function is declared twice in the same class.
-
- * cplus-decl.c (finish_decl): Length argument to `bcopy' was off
- by one for anonymous aggregate names was off by one.
-
- Thu Nov 30 16:29:42 1989 Michael Tiemann (tiemann at arkesden)
-
- * expr.c (expand_builtin): In BUILTIN_SAVEREGS case, advance
- SAVING_INSNS after noting stores.
-
- Wed Nov 29 05:35:59 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-except.c (expand_cplus_reraise): If an exception was not
- on the legal list of exceptions to reraise, don't bother
- protecting the raised object by assigning zero to its pointer.
-
- * cplus-class.c (build_method_call): When calling a non-const
- member function from a const member function, tell which non-const
- member function is being called. Also, return ERROR_MARK_NODE if
- we are not looking up to complain.
-
- * cplus-type2.c (build_functional_cast): Due to typedefs, we must
- pull NAME from TYPE.
-
- * cplus-typeck.c (build_compound_expr): If TREE_VALUE of list is a
- VAR_DECL, use result of calling `decl_constant_value'.
-
- * stmt.c (expand_end_except): PREV was uninitialized.
-
- * stmt.c (expand_exit_except): New function, like
- `expand_exit_loop'. Used to explicitly exit an except contour.
- * cplus-parse.y,cplus-except.c: Replace calls to
- `expand_exit_something' with calls to `expand_exit_except'.
- * cplus-decl.c (start_function): If FLAG_HANDLE_EXCEPTIONS, build
- an exception contour around the outermost binding level.
- * cplus-decl.c (finish_function): If FLAG_HANDLE_EXCEPTIONS, clean
- up that countour after the last binding contour goes away.
- * stmt.c (in_{try,except}_block): Added LEVEL parameter.
- * stmt.c (in_exception_handler): Added LEVEL parameter.
- * cplus-except.c: All callers to `in_try_block' as about level 1
- instead of immediate level, because outermost try block doesn't
- really count.
-
- * cplus-except.c (cplus_expand_end_except): Call abort if catching
- unhandled exception at outermost level.
-
- Tue Nov 28 06:51:48 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-except.c (expand_cplus_raise): Interface changed to take
- third parameter which is the already-constructed object to be
- raised, allowing `expand_cplus_reraise' to call this function.
-
- * cplus-parse.y (try RERAISE raise_identifiers): Actually
- implement this now.
- * cplus-except.c (expand_cplus_reraise): Ditto.
-
- * cplus-decl.c (init_decl_processing): Initialize LANG_NAME_C and
- LANG_NAME_CPLUSPLUS. Initialize CURRENT_LANG_NAME to LANG_NAME_C.
- * cplus-class.c (init_class_processing): Initialization of
- LANG_NAME_{C,CPLUSPLUS} was too late here.
-
- * cplus-decl.c (duplicate_decls): If NEWDECL is a FUNCTION_DECL,
- and it was the last object allocated on the permanent_obstack, cut
- the permanent_obstack back to NEWDECL, since we have OLDDECL.
-
- @ The following three changes are conditional on actually defining
- LANG_DECL_PERMANENT in cplus-tree.h. It is currently not defined
- becuase a good solution for saving lang_decls might require more
- space than the space that could be reclaimed.
-
- @ cplus-tree.h (lang_decl): New bit LANG_DECL_PERMANENT says if
- the lang_decl was allocated on the permanent_obstack.
- @ cplus-lex.c (build_lang_decl): Set it if appropriate. New
- variable FREE_LANG_DECL_CHAIN holds previously freed LANG_DECLs.
- @ cplus-decl.c (duplicate_decls): Add the lang_decl of the old
- decl to FREE_LANG_DECL_CHAIN if it was allocated on the
- permanent_obstack.
-
- * cplus-decl.c (duplicate_decls): Preserve DECL_LANGUAGE when
- NEWDECL is a definition.
- * cplus-decl.c (start_function): Don't set DECL_LANGUAGE here, now
- that it is properly handled in `duplicate_decls'. Also, set
- DECL_OVERLOADED (DECL1) from DECL_OVERLOADED (OLDDECL).
-
- Mon Nov 27 06:30:53 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-method.c (dump_init): Argument to `dump_type' was missing
- in SAVE_EXPR case.
-
- * cplus-class.c (compute_conversion_costs): While it is probably
- an error to permit a call from a const member function to a
- non-const member function, cfront seems to do it, grudginly.
- Change this function to make this conversion cost the heaviest of
- built-in conversion costs, to give behavior that matches cfront.
- This can easily be changed back to error-giving behavior.
- * cplus-class (build_method_call): Give warning if calling to
- non-const member function from const member function.
-
- * cplus-method.c,cplus-class.c: Change name of
- `do_actual_overload' to `build_overload_call', and move the
- function from cplus-method.c to cplus-class.c. Also, rewrite
- slightly to call `build_decl_overload', removing duplicated code.
- * cplus-typeck.c (build_x_function_call): Change the name of
- called function.
-
- * cplus-tree.c (hash_tree_cons): Typo--set TREE_VIA_PUBLIC twice,
- instead of TREE_VIA_PUBLIC and TREE_VIA_VIRTUAL.
-
- * cplus-decl.c (finish_decl): It is INIT, and not
- DECL_INITIAL (DECL) which holds the real value of DECL's
- initializer. We need INIT's value for `complete_array_type' to do
- its job.
-
- * expr.c (save_noncopied_parts): Deal with case of having
- `assign_stack_local' return an invalid memory reference.
-
- * cplus-typeck.c (build_component_ref): 11/26 fix was almost
- right, but called `value_member' in first case where should have
- called `assoc_value'.
-
- * cplus-init.c (expand_vec_delete): Lines were reversed in
- multi-dimensional array code.
-
- * version.c: Test release version 1.36.2-
-
- * integrate.c (expand_inline_function): Bug in use of
- CONST_EQUIV_MAP did not work correctly in the presence of loops
- for variables initialized in first basic block but modified within
- a loop body.
-
- Sun Nov 26 17:11:08 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-init.c (build_new): Handle case when TRUE_TYPE gets
- ERROR_MARK_NODE, such as when the size expression for an ARRAY_REF
- is ERROR_MARK_NODE.
-
- * cplus-type2.c (digest_init): Catch case where ELEMENT is
- ERROR_MARK_NODE, which avoids calling `comptypes' with
- ERROR_MARK_NODE as our type (recall that TREE_TYPE (ERROR_MARK_NODE)
- is ERROR_MARK_NODE, not NULL_TREE).
-
- * cplus-typeck.c (build_component_ref): Forgot to pull offset from
- association of type once we found the field! This causes fields
- in two separate baseclasses to overlap when referenced from a
- class deriving from the baseclasses.
-
- * cplus-parse.y (primary, primary_no_id): Recognize
- `SCOPE operator_name'.
-
- * cplus-decl.c (grok_reference_init): Code to permit references to
- arrays was somehow missing. Also, in the case where DECL is
- TREE_STATIC and the initializer is TREE_LITERAL, no need to call
- `expand_static_init'.
-
- * cplus-tree.h [DECL_OVERLOADED]: User `overloaded_attr' in
- lang_decl to distinguish overloaded functions from nonoverloaded
- ones.
- * cplus-tree.h [DECL_EXTERNAL]: Use TREE_LANG_FLAG_1 instead of
- TREE_LANG_FLAG_3. The latter was used for TREE_PRIVATE.
-
- * cplus-init.c (expand_vec_delete): Handle multi-dimensional
- arrays.
-
- * cplus-decl.c (duplicate_decls): Copying of DECL_IN_AGGR_P bit
- was backwards.
- * cplus-decl.c (start_decl): And need to turn off DECL_IN_AGGR_P
- when seeing this decl in non-aggr context. Also, clear
- TREE_EXTERNAL if DECL_EXTERNAL is not set.
-
- * cplus-decl.c (grok_reference_init): Code split from
- `finish_decl' for modularity.
-
- Sat Nov 25 06:29:08 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-decl.c (grokdeclarator): Was incorrectly rejecting
- class-local typedefs which had things like RID_LONG (thought they
- were storage class specifiers).
-
- * cplus-method.c (report_type_mismatch): Corrected error
- introduced by making INLINE_BUFFER non-static.
-
- * cplus-tree.c (build_exception_variant): Correctly handle case
- when RAISES is NULL_TREE.
-
- * cplus-except.c (lookup_exception_object): Switch to
- permanent_obstack when implicitly declaring an exception object.
-
- * cplus-class.c (instantiate_type): Handle TREE_LIST of
- FUNCTION_DECL in addition to TREE_LIST of TREE_LIST of
- FUNCTION_DECL. The former is what a BASELINK in disguise.
-
- * cplus-decl.c (grokdeclarator): Don't crash if TYPE ==
- ERROR_MARK_NODE when DECL_CONTEXT == FIELD. Happens when array
- size is undefined, for example.
-
- Fri Nov 24 16:04:44 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-search.c (get_baselinks): When we get to end of search
- (i.e., TYPE has only one basetype), propagate BASELINKs.
-
- * cplus-decl.c (shadow_tag): Missing call to
- `end_exception_decls'.
-
- Tue Nov 21 23:40:57 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-method.c: Change from static allocation of INLINE_BUFFER
- to dynamic, saving 8k static data size.
- * cplus-method.c (fndecl_as_string): Initialize INLINE_BUFFER
- always from BUF.
- * cplus-class.c, cplus-tree.c: Callers of `fndecl_as_string'
- changed.
-
- Mon Nov 20 20:56:49 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-class.c (build_method_call): Don't check visibility on
- calls to wrappers.
-
- * cplus-tree.h: Delete bitfields HAS_WRAPPER and NEEDS_WRAPPER.
- Add field for TYPE_WRAP_TYPE.
- * cplus-decl.c, cplus-class.c: Set fields accordingly
- * cplus-class.c (build_method_call): Call `get_wrapper' if we need
- to be wrapping a function call.
- * cplus-search.c (get_wrapper): Implement this function.
-
- Sat Nov 18 05:16:22 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-lex.c (check_newline): Recognize (but apologize about)
- #pragma newworld.
-
- * cplus-method.c (build_decl_overload): Compact encoding for
- member functions ifndef LONGERNAMES.
- * cplus-dem.c (cplus_demangle,do_args): Deal with different
- encoding ifndef LONGERNAMES.
-
- * cplus-tree.c (list_has_lookup_or_cons): New function optimizes
- most common case in parsing.
- * cplus-parse.y: Call in in place of `hash_tree_chain (_, NULL_TREE)'.
-
- * cplus-parse.y, cplus-lex.c: Gather statistics on tokens and
- reductions.
-
- * cplus-class.c (instantiate_type): Forgot to check COMPLAIN
- before complaining.
-
- * cplus-init.c (build_new,build_vec_delete): Call
- do_pending_stack_adjust before building and after finalizing
- RTL_EXPR. Also removed bogus construct
-
- emit_insn (gen_sequence ());
-
- which was causing circular rtl to be output. (Thanks to rms for
- identifying the problem!).
- * cplus-type2.c (make_merged_ref): Same change.
- * cplus-parse.y (except_stmts): Same change.
-
- * cplus-init.c (get_member_function): Wrap a SAVE_EXPR around the
- address of MEMBER.
-
- Fri Nov 17 20:11:19 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-type2.c (store_init_value)
-
- * cplus-dem.c (do_type): Initialize NON_EMPTY.
-
- Tue Nov 14 00:19:31 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-init.c (build_vec_delete): Call `emit_note' in case no
- code is emitted by `expand_vec_delete'.
-
- * cplus-parse.y (operator_name): If the operator name is
- erroneous, build something signifying that fact, rather than just
- returning NULL_TREE.
-
- * cplus-typeck.c (target_type): New function. Returns the target
- type of TYPE.
- * cplus-decl.c (finish_decl): Call `target_type' to figure out the
- built-in type that DECL is based on. If we find it to be
- ANON_AGGRNAME_P, then we must change it, since nothing else will,
- and the compiler will go into loops if expand_inline_function trys
- to push it back into the environment.
-
- * cplus-parse.y (primary): Need to do `lookup_name' on operator
- names that come through here.
-
- * stmt.c (expand_end_try): Jump to after label to avoid falling
- through into default handler.
-
- * cplus-decl.c (define_label): Don't complain about jumps past
- initialziation of compiler-generated temporaries. They can't be
- accessed, and by the time we get to the label, they should be
- cleaned up.
-
- Mon Nov 13 02:34:58 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-init.c (get_member_function): If EXP_ADDR was something
- hairy (like a CALL_EXPR), make EXP indirect from it. This saves
- writing out twice the code (once for each branch of the
- conditional).
-
- * cplus-dem.c (cplus_demangle): Recognize virtual function tables.
- * Also, handle operator* and operator->().
-
- * cplus-class.c (finish_struct): Don't warn about all class
- members being private if there are public baseclasses.
-
- * cplus-decl.c (grokdeclarator): Catch case where friend function
- is declared with method qualifiers.
-
- * cplus-typeck.c (commontype): Get the right value for BASETYPE in
- METHOD_TYPE case.
-
- * cplus-method.c (build_opfncall): TYPE1 was being initialized too
- late.
-
- * cplus-dem.c[USG]: Use this instead of #ifndef sequent.
-
- Sun Nov 12 01:35:08 1989 Michael Tiemann (tiemann at arkesden)
-
- * integrate.c (note_integrated): New function. If insn generated
- used constants, check that it is legit. If not, delete it and
- return zero to caller, indicating that the caller should try
- again. If successful, set RTX_INTEGRATED_P.
-
- * cplus-tree.c (layout_vbasetypes): Use `int' return type to
- advantage.
-
- * cplus-init.c (build_delete): Don't abort if TYPE ==
- ERROR_MARK_NODE. It can happen.
-
- * integrate.c: Use "iteration numbering" to propagate constants
- through inline function expansion.
-
- * stmt.c: Added exception stmts to nesting stack.
- * cplus-except.c: Move appropriate stuff out of here.
-
- Sat Nov 11 10:10:59 1989 Michael Tiemann (tiemann at arkesden)
-
- * integrate.c: Make `expand_inline_function' smart enough to use
- constant when safe, and not when not.
-
- * integrate.c: Merged changes from rms as of today.
- * varasm.c: Merged changes from rms as of today.
-
- * cplus-except.c: Use variable TRY_DEPTH to determine whether we
- are inside a TRY block or not.
- * cplus-except.c (cplus_expand_{start,end}_try):
- Increment/decrement that variable.
- * cplus-except.c (expand_cplus_raise_stmt): If TRY_DEPTH is
- nonzero, then simply exiting the try block does all the right
- things. Otherwise, we must use `longjmp'.
-
- * cplus-init.c (build_new): Don't use the RTL_EXPR hack for static
- initializations.
-
- * ld.c (write_output): Unconditionally remove the old file in case
- another owns it but user has write permission.
-
- * cplus-decl2.c (finish_file): Set DECL_PRINT_NAME of file
- clean/initialization functions to things we might want to print.
-
- Fri Nov 10 19:08:51 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-tree.h: Get rid of EXCEPTION_LABEL_DECL, no longer needed.
- Add EXCEPTION_THROW_DECL. This VAR_DECL is used to determine
- whether to throw from a binding contour using the exception
- handling machinery.
- * cplus-decl.c, cplus-except.c: Changes to adapt to new model.
-
- * tree.c (build_op_identifier): #if 0 in this file.
- * cplus-lex.c (build_op_identifier): define this function here.
- Change interface to take `tree_code' arguments instead of `tree'
- arguments. Use memoizing table to preserve previously allocated
- nodes.
- * cplus-parse.y, cplus-method.c: Callers changed.
- * cplus-lex.c (build_operator_fnname): Can't get by on
- side-effecting an OP_IDENTIFIER's TREE_CODE anymore. Change
- interface to pass OP_IDENTIFIER node in as a tree*, and set that.
- * cplus-decl2.c (grokopexpr): Must also take DECLARATOR in as
- pointer.
-
- * cplus-init.c (build_new): After calling `start_sequence', prime
- the insn pump by calling `emit_note' to emit a NOTE_INSN_DELETED.
-
- Wed Nov 8 15:54:32 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-type2.c (build_functional_cast): Move from cplus-class.c
- to this file.
-
- * cplus-class.c (build_functional_cast): Don't assume that
- TYPE_NAME (TYPE) is a TYPE_DECL; it might be an IDENTIFIER_NODE.
-
- * gcc.c (main): Print out the name `g++' instead of `gcc' until
- the merge is complete.
-
- Tue Nov 7 14:56:50 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-init.c (build_new): Initialize RVAL if SOS.
-
- Mon Nov 6 00:51:43 1989 Michael Tiemann (tiemann at arkesden)
-
- * crt1.c: Changes from Eirik Fuller (Cornell Theory Center) to fix
- incremental linking.
- * gnulib3.c (__do_global_cleanup): Also from Eirik: fixed braino
- that was not reinitializing __DLI.
-
- * cplus-method.c (build_overload_name): Mangle member functions
- with qualifiers differently than member functions without
- qualifiers. Also, add 'F' before argument list for METHOD_TYPE,
- since cfront 2.0 seems to do so.
- * cplus-method.c (dump_type_suffix): Make formatting of these
- kinds of METHOD_TYPEs right.
- * cplus-dem.c (do_type): Grok these changes.
-
- * cplus-except.c (exception_object_name): Don't crash in case
- of ``raise all'', which comes encoded as VOID_TYPE_NODE.
- @@ Handle it correctly in next release.
-
- * cplus-decl2.c (grok_method_quals): New function. Incorporate
- `const' and `volatile' qualifiers into FUNCTION_DECLs and
- TYPE_DECLs. Uses code broken out of `grokclassfn'.
- * cplus-decl2.c (grokclassfn): Caller changed.
- * cplus-decl.c (grokdeclarator): Call `grok_method_quals' when
- QUALS is non-zero in declarator grokking loop.
-
- Sat Nov 4 20:21:54 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-init.c (build_new): If TYPE_NEEDS_CONSTRUCTING (TYPE),
- then always wrap RVAL in an RTL_EXPR, since we don't know that we
- aren't one of the arms of a ?: operation. RVAL can now be a
- SAVE_EXPR (normally) or a VAR_DECL (in the case of array
- initialization).
-
- * cplus-init.c (build_new): Fix braino that was causing array
- types to be collapsed into their element types, causing
- `build_new' to return a point to the element type, rather then a
- pointer to the array type.
-
- * cplus-decl2.c (grokfield): Check DECL_NAME (VALUE) before
- dereferencing it.
-
- * cplus-init.c (expand_vec_init): Do not fail to initialize
- element of an array which receive default initialization.
-
- * cplus-type2.c (digest_init): If TYPE needs constructing,
- don't convert INIT to TYPE. The only time when this happens
- is when called upon to initialize an ARRAY_TYPE, and
- `expand_vec_init' will handle that case.
-
- * cplus-class.c (build_method_call): Error reporting for bad
- argument list was screwed for static member functions in static
- call context.
-
- * config.g++: Add MIPS-based configurations.
-
- * toplev.c: Make up for systems which do not have unistd.h (like
- many BSD systems).
- * Makefile: Add HAVE_UNISTD_H flag.
-
- * cplus-dem.c: Sequentize the code.
-
- * cplus-init.c (expand_cplus_expr_stmt): Warn if statement is just
- a reference to, and not a call of, some function.
-
- Thu Nov 2 10:03:50 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-method.c (build_overload_name): Don't crash if we built a
- TREE_LIST which contains VOID_TYPE_NODE and which is not
- VOID_LIST_NODE. This happens if one of the parameters is of type
- VOID_TYPE.
-
- * stmt.c (expand_return): Even when RETVAL has type VOID_TYPE, we
- must expand it (it may be a call to another void function).
-
- * integrate.c (copy_rtx_and_substitute): Moved one to many insns
- to BEFORE_INLINE_FP_RTX.
-
- * cplus-typeck.c (convert_for_initialization,actualparameterlist):
- Don't defaultly convert ARRAY_TYPE when converting to
- REFERENCE_TYPE.
-
- Wed Nov 1 04:43:46 1989 Michael Tiemann (tiemann at teacake)
-
- * stmt.c (init_function_start): Initialize MAX_PARM_REG to
- FIRST_PSEUDO_REGISTER.
-
- * cplus-init.c (expand_vec_init): This function can be called to
- initialize a non-aggregate vector.
-
- Tue Oct 31 13:38:42 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-type2.c (process_init_constructor): Don't even try
- initializing a structure from EMPTY_INIT_NODE.
-
- * cplus-init.c (build_new): Handle case where SAVE_EXPR_RTL of
- new'd value is 0 by putting it CONST0_RTX.
-
- * cplus-typeck.c (build_component_ref): If the COMPONENT_REF is
- really a reference to a member function, do the right thing if the
- member function is virtual.
-
- Mon Oct 30 00:39:18 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-class.c (build_method_call): Removed code that seemed to
- build (superflouously) an INDIRECT_REF for INSTANCE just before
- heading to found/found_and_ok (where INSTANCE was just
- reinitialized). Also, fixed bug so that if INSTANCE was of fixed
- type, that fact remained known even if INSTANCE_PTR became more
- distanct due to going through a NOP_EXPR.
-
- * cplus-init.c (get_member_function): Add parameter EXP_ADDR_PTR
- which is a pointer to the tree representing the address of EXP.
- Also, add hairy code which does the right thing wrt. modifying
- `this' pointer when it is argument to call.
- @@ This modification causes GNU C++ to generate stupid
- conditional-branch code when optimizing. Hopefully future
- versions of the optimizer will understand and optimize it.
- * cplus-typeck.c (build_x_function_call): Caller changed.
-
- * cplus-tree.h (lang_type): Added new field GOT_SEMICOLON to
- TYPE_FLAGS field, to record whether a type has been `finished' or
- not. Attempt to catch bugs like `struct s { .. } main () { .. }'.
- * cplus-parse.y (various rules): Add call to `note_got_semicolon'.
- * cplus-decl.c (start_function): Check that we have a `finished'
- type.
- * cplus-lex.c (note_got_semicolon): Set the bit here.
- * cplus-class.c (finish_struct): Whenever we start afresh with a
- class type, zero the bit here.
-
- * cplus-type2.c: Rename file cplus-typeck2.c to fit brain-damaging
- SVID 14 char name limit.
-
- * cplus-typeck.c (build_modify_expr): Handle case where assignment
- comes from friend, rather than member function.
-
- * cplus-tree.c (lang_printable_name): Handle case where DECL's
- language specific field is nonexistent.
- * cplus-method.c (fndecl_as_string): Here too.
-
- * cplus-decl.c (finish_decl): Initialization of a reference from
- `*this' was falling down because nodes for `$this' were getting
- shared too much.
-
- * cplus-tree.h (TREE_HAS_CONSTRUCTOR): Reincarnate use of this
- flag--for SAVE_EXPR it means that underneath lies a call to
- `new' for a given type.
- * cplus-init.c (build_new): Set the flag.
- * cplus-method.c (dump_init): Test it.
-
- * cplus-tree.h (PARM_DECL_EXPR): Use this flag to distinguish
- parsing initializers for PARM_DECLs from initializers for global
- variables.
- * cplus-decl2.c (finish_file): Don't emit anything from
- STATIC_AGGREGATES that was really just for default parameters.
- * cplus-decl.c (grokparms): Set PARM_DECL_EXPR on SAVE_EXPRs.
- * cplus-method.c (dump_init): Same.
-
- Sun Oct 29 23:23:48 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-method.c (build_opfncall): Don't check visibility here for
- operators `new' and `delete' unless within a constructor or
- destructor.
- * cplus-decl.c (finish_function): Add checks for visibility of
- those operators here instead.
-
- * cplus-decl2.c (groktypefield): Handle case where field name
- conflicts with a typedef.
-
- Fri Oct 27 01:02:20 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-search.c (get_virtuals_named_this): Return a baselink
- instead of a FUNCTION_DECL. Also, walk through FIELDS as
- baselinks. I.e., use `next_baselink' instead of TREE_CHAIN.
-
- * cplus-search.c (get_first_matching_virtual): Caller changed.
-
- Thu Oct 26 16:09:07 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-search.c (get_first_matching_virtual): Only complain about
- a particular property of a virtual function once.
-
- * cplus-class.c (finish_struct): If ASSOC winds up being zero,
- don't frob the vtable.
-
- * cplus-decl.c (shadow_tag): Handle case where exception does not
- have any fields.
- * cplus-parse.y (component_decl): Handle case where exception does
- not have any fields.
-
- * cplus-parse.y (structsp): Call `finish_exception' with only two
- parameters.
-
- * cplus-parse.y (stmt): Forgot ';' after `RAISE' stmt.
-
- * cplus-class.c: Gather statistics on number of elments in virtual
- function tables, number of entries we build for them, and number
- of virtual function table entries we search using linear lookup.
-
- * cplus-parse.y (aggr,opt.component_decl_list): Call
- `build_tree_list' instead of `decl_tree_list', because of nested
- structures. Would be better to make TEMP_DECL_OBSTACK pushable
- like the momentary obstack, but we don't for now.
-
- Tue Oct 24 06:26:13 1989 Michael Tiemann (tiemann at arkesden)
-
- * integrate.c (copy_rtx_and_substitute): Don't change something to
- a memory address unless it really is `memory_address_p'.
-
- * cplus-decl.c (finish_decl): Handle array initialization if type
- of array needs constructor. Also, implement initialization
- without INIT0 crutch.
- * cplus-init.c (expand_vec_init): Handle array initialization from
- {...} where type of array needs constructor.
-
- * cplus-typeck.c (build_binary_op_nodefault): Make compiler give
- error, not warning, if comparing pointers with integers.
-
- * cplus-typeck.c (build_component_ref): Call `lookup_fnfields' to
- get a list of methods.
-
- Mon Oct 23 17:29:03 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-tree.h (lang_decl): Add bit `COMPILER_GENERATED' to
- indicate whether this FUNCTION_DECL was generated automatically by
- the compiler.
- * cplus-lex.c (cons_up_dtor_for_type): Set this bit.
- * cplus-decl.c (redeclaration_error_message): Give better error
- message if user redeclares something that was implicitly created
- by the compiler.
-
- * cplus-decl.c (finish_decl): Test DECL_LANG_SPECIFIC before
- testing DECL_IN_AGGR_P in case of init-free reference decl.
-
- Sat Oct 21 10:29:09 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-class.c (build_method_call): Forgot to increment b_or_d as
- we go through class hierarchy. Probably fell out as a result of
- `next_baselink' change on Friday, Oct 13.
-
- * cplus-cvt.c (build_up_reference): When calling
- `convert_to_nonzero_pointer', use TYPE_MAIN_VARIANT so that
- TYPE_POINTER_TO is defined.
-
- * cplus-search.c ({push,pop}_memoized_context): Plug memory leak
- by freeing pushing and popping the TYPE_OBSTACK irrespective of
- whether we are memoizing lookups or not.
-
- * cplus-decl2.c (grokclassfn): Don't make `this' TREE_READONLY
- inside of destructors.
-
- * cplus-search.c (get_abstract_virtuals): New function. Returns
- the list of virtual functions that are considered abstract for a
- given type (i.e., those which are ` = 0' in declaration).
- * cplus-class.c (finish_base_struct): Call it.
-
- * All GNU C++ files: change names containing `UNINHERIT*' to names
- containing `ABSTRACT'. Eliminate use of
- CLASSTYPE_HAS_ABSTRACT_VIRTUALS in favor of testing
- CLASSTYPE_ABSTRACT_VIRTUALS directly.
-
- * cplus-decl.c (start_function): Handle case where user names and
- internal names conflict.
-
- * cplus-typeck.c (build_conditional_expr): Put type instantiation
- back in.
-
- * cplus-decl.c (start_function): Use DECL_STATIC_CONTEXT instead
- of DECL_CONTEXT for pushing into context of static function.
-
- * cplus-decl.c (auto_function): Like `builtin_function', but
- builds an overloadable function.
- * cplus-decl.c (init_decl_processing): Call it for __builtin_new,
- __builtin_delete and similar functions.
-
- Fri Oct 20 02:22:06 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-decl.c (finish_decl): Set TREE_USED bit of DECL if DECL is
- a const VAR_DECL at TOPLEVEL.
-
- * cplus-class.c (modify_vtable_entry): Still more fixes to code
- which computes derived vtable.
-
- Thu Oct 19 11:14:55 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-class.c (finish_struct): Move code that sets
- TYPE_USES_MULTIPLE_INHERITANCE from here...
- * cplus-decl.c (xref_tag): ...to here.
-
- * cplus-decl.c (finish_decl): Oct 12 change to implement
- initialization of class members so that their initializers could
- use private members did not test DECL sufficiently. In addition
- to checking DECL_CONTEXT, must also check that TREE_CODE (DECL) ==
- VAR_DECL. Otherwise redeclaration of member functions cause
- crashes.
-
- Tue Oct 17 03:34:05 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-method.c (hack_identifier): Use `error', not
- `error_with_decl' to report that a non-static member is being
- referenced in a static member function.
-
- * cplus-decl.c (duplicate_decls): TREE_INLINE was not being set
- for OLDDECL, which is really where it matters.
-
- * cplus-typeck2.c (merge_component_comparisons): Track TEM1 in
- addition to TEM0 in loop which computes BITPOS0.
-
- * cplus-decl2.c (grokfield): Set CLASSTYPE_LOCAL_TYPEDECLs from
- CURRENT_CLASS_TYPE rather than DECL_CONTEXT (VALUE), since the
- latter is not set up for TYPE_DECLs.
-
- * cplus-decl.c (xref_tag): Set CLASSTYPE_DECLARED_CLASS each time
- we see an xref to this tag until we see the actual type defined
- for this tag.
-
- Mon Oct 16 01:48:27 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-tree.h (DECL_VIRTUAL_P): If set in an IDENTIFIER_NODE, it
- means that somebody has defined a virtual function with this name.
- * cplus-decl.c (grokfndecl): Set it.
- * cplus-search.c (get_first_matching_virtual): Use it.
-
- * cplus-decl.c (cplus-tree.h): Define DECL_EXTERNAL as synonym for
- TREE_LANG_FLAG_3, which means for a VAR_DECL to mean that `extern'
- was specified in for that VAR_DECL.
- * cplus-decl.c (grokvardecl): Set DECL_EXTERNAL.
- * cplus-decl.c (duplicate_decls): Set TREE_PUBLIC of `const'
- variables based on TREE_STATIC and DECL_EXTERNAL.
-
- Sun Oct 15 00:44:01 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-decl.c (start_function): Set CURRENT_EXTERN_INLINE from
- TREE_PUBLIC of DECL1 if DECL1 came pre-parsed.
-
- * cplus-decl2.c (finish_file): Don't write out inline functions
- which had their address taken if they were declared
- `extern inline'.
-
- * cplus-decl.c (grokdeclarator): Don't set TREE_PUBLIC based on
- INLINEP here. Also, don't treat RID_INLINE as being a storage
- class for `multiple storage classes' error message.
- * cplus-decl2.c (grokfield): Do it instead here.
- * cplus-init.c (do_friend): And here.
- * cplus-decl.c (duplicate_decls): And change this to more match
- how GCC does things.
-
- * cplus-lex.c [USG_STDIO]: Use this instead of USG, for turncoats
- who have enough of System V that their stdio is broken, and too
- much Berkeley for USG to be the right thing.
-
- * cplus-decl.c (grokdeclarator): Grok declarations of the form
- `X x(args)[size]' to mean ARGS is an initializer to the array
- constructor for X[SIZE].
- * cplus-decl2.c (finish_file): Handle new case.
-
- * cplus-method.c (build_opfncall): Don't abort if user makes a bad
- call to operator new. It's not the compiler's fault.
-
- * cplus-init.c (finish_base_init): Unmark virtual baseclasses
- which have explicit initializers.
-
- * cplus-init.c (expand_aggr_init_1): Change PROTECT parameter to
- FLAGS parameter. All callers changed.
-
- * cplus-decl.c (finish_function): In destructor code, it is
- CLASSTYPE_VSIZE, not TYPE_VIRTUAL_P, which is the operative
- value to test when building base destructor code. See Sept 1
- change for more info.
-
- * cplus-parse.y (unary_expr): Arguments to build_vbase_delete were
- wrong: was passing POINTER_TYPE and address when should have been
- passing object type and object.
-
- Sat Oct 14 06:45:34 1989 Michael Tiemann (tiemann at arkesden)
-
- * stmt.c (expand_anon_union_decl): For anonymous unions in memory,
- don't call `change_address'. Just cast the memory reference
- ourselves.
-
- * cplus-typeck2.c (store_init_value): Don't test PEDNATIC to see
- whether to permit initialization of static variable from
- non-constant, since C++ 2.0 defines it to work.
-
- * cplus-init.c (expand_aggr_init_1): PARM_SLOTS was allocating
- sizeof (char) instead of sizeof (struct rtx_def*).
-
- * cplus-decl.c (grokfndecl): Call to `get_first_matching_virtual'
- must be followed by code which, under certain cases, goes all the
- way down the inheritance hierarchy to match the virtual function.
- Otherwise, the wrong virtual function tables come in to play when
- the time comes to reconcile them (in modify_vtable_entry). Note
- that the call to `get_first_matching_virtual' does the right thing
- within `finish_struct'. In that case, since we pull BASE_FNDECL
- from a virtual base class's virtual function table, there is no
- issue where it should be thought of as coming from.
-
- * cplus-search.c (rank_mi_virtuals): Spurious TREE_TYPE made it
- look like we were trying to compare PARM_DECLs instead of _TYPE
- nodes in our list at some time.
-
- * cplus-search.c (get_first_matching_virtual): Friday the 13th
- change was wrong. Instead, make `get_first_matching_virtual'
- handle the instance variable itself, and call `compparms' as
- before.
-
- * cplus-lex.c (reinit_parse_for_method): Null character was being
- inserted if USG hack to round up buffer length was being used.
-
- * cplus-class.c (compute_conversion_costs): When trying a type
- conversion, use the actual type that the function wants. No
- reference-bashing here!
-
- * cplus-search.c: Add a new obstack BRIDGE_OBSTACK which contains
- the class declarations across scopes. This is an alternative to
- building their lists on the permanant_obstack.
- * cplus-search.c (push_search_level): Record the obstack for which
- this level was pushed.
- * cplus-search.c (pop_search_level): Remove OBSTACK parameter.
- Get that value from the search level that is being popped.
-
- * cplus-tree.h (lang_type): Add a slot for the instance variable.
- * cplus-decl.c (start_function): Use it.
-
- * tree.c (build_nt0): New function. Use this to build declarators
- instead of `build_nt'. Uses new obstack `temp_decl_obstack'.
-
- * cplus-cvt.c (build_type_conversion): Distinguish void* from
- const void* if we are trying to convert from some arbitrary
- pointer to a void* variant.
-
- * cplus-class.c (finish_struct_bits): New function. Code broken
- out of `finish_struct'. Extend to handle both conversions to
- const pointers and conversions to non-const pointers.
-
- * cplus-tree.h (lang_type): Extend to handle both conversions to
- const pointers and conversions to non-const pointers.
-
- * cplus-decl.c (start_function): FNTYPE was not re-set after
- calling `pushdecl'. Consequently, static member functions with
- default arguments were breaking.
-
- * cplus-class.c (pushclass): When pushing tags into the class
- binding level, push the TYPE_DECL, not the _TYPE into the
- IDENTIFIER_CLASS_VALUE slot.
-
- * cplus-method.c (fndecl_as_string): Don't skip first parameter if
- FNDECL is a static member function.
-
- * gplus.gperf [CATCH]: Add it.
-
- * cplus-init.c (build_member_ref): Nodes returned from
- lookup_fnfields are not saved on the permanent obstack, regardless
- of CURRENT_OBSTACK. This is usually ok, since they are usually
- only used as a structure through which search machinery will
- traverse looking for values that do live on the permanent obstack.
- One exception is when `build_member_ref' builds an expression
- which requires type instantiation at top-level.
-
- * cplus-decl.c (finish_decl): Give better error messages for
- initialization of references, and remove invalid messages as well.
- Initialization of type-qualified references is different than
- initialization of type-qualified pointers in the following way:
- you can initialization a `X&' from a `const X&', but you cannot
- initialize a `X*' from a `const X*'. This is because the compiler
- can convert the `const X&' to a `const X', create a new temporary,
- and take a reference from that.
-
- * cplus-init.c (is_friend): In testing for friendly classes, allow
- for static member functions to be considered friends.
-
- Fri Oct 13 00:03:18 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-decl.c (grokdeclarator): If DECL_CONTEXT is FIELD for
- building a TYPE_DECL, allocate using `build_lang_field_decl'
- instead of `build_decl'.
-
- * cplus-decl.c (xref_tag): Undo Sept 10 change. It causes
- problems for InterViews. Better to work around in ET++.
-
- * cplus-decl.c (lookup_name): When looking up NAME, if
- CURRENT_CLASS_TYPE is being defined, check its baseclasses for a
- definition of a TYPE_DECL.
-
- * cplus-decl.c (grok_enum_decls): Return DECL, not NULL_TREE if
- TYPE has already been recorded.
-
- * cplus-search.c (dfs_pushdecls): Push class-local TYPE_DECLs into
- IDENTIFIER_CLASS_VALUEs.
-
- * cplus-typeck.c (c_expand_return): Call `expand_cleanups_to' with
- NULL argument in case the return value generated cleanups for its
- call.
-
- * stmt.c (expand_anon_union_decl): Fixed so that MEM anon unions
- are correctly handled.
-
- * cplus-decl2.c (finish_anon_union): Handle non-global static
- anonymous unions.
-
- * cplus-decl.c (shadow_tag): Change int variable OK to enum
- tree_code OK_CODE, remembering the value of the code we though was
- ok. This avoids being confused when other legitimate DECLSPECS
- (such as `static') appear after one like `union ...'.
-
- * cplus-class.c (popclass): When popping from a class's scope,
- back to another class's scope, restore CURRENT_VTABLE_DECL only if
- we had one before.
-
- * cplus-decl2.c (grokfield): Push TYPE_DECL into class level as
- soon as we see it.
-
- * cplus-class.c (instantiate_type): In ADDR_EXPR case, complain if
- type we are instantiating to is not POINTER_TYPE.
-
- * cplus-decl.c (start_method): Call `preserve_data' to save the
- parameters (which were read into the maybepermanent obstack).
-
- * cplus-typeck2.c (digest_init): Handle case of union with
- constructor.
-
- * cplus-init.c (build_member_ref): Vestigial bug from change in
- representation of method lists (from list of lists to list of
- chains).
-
- * cplus-class.c (instantiate_type): Rewrite TREE_LIST case to use
- `next_baselink' when appropriate, and to try overloading based on
- non-member functions if that looks appropriate.
-
- * cplus-search.c (next_baselink): New function. Contains code
- broken out of `build_method_call' to advance to next chain of
- FUNCTION_DECLs.
-
- * cplus-init.c (build_member_ref): If member ref is a reference to
- non-unique member function, return a BASELINK (which is a list of
- lists) rather than a list containing just that type's methods with
- that name.
-
- * cplus-init.c (resolve_member_ref): Handle uninstantiated method
- types.
-
- * cplus-decl.c ({start,finish}_decl): Call pushclass/popclass for
- decls which are static class members, in order to perform
- visibility computations for initializers correctly.
- * cplus-decl.c (grokvardecl): If static class member, set
- DECL_CONTEXT of the decl to the containing class type.
-
- * cplus-search.c (get_first_matching_virtual): Must call comptypes
- starting from first parameter, not its TREE_CHAIN, since one
- version of the function may have a this which is `*const' while
- the other does not.
-
- * cplus-decl.c (finish_decl): Permit static class members of
- reference type to be uninitialized in class declaration. They
- will get initialized elsewhere, presumably.
-
- * cplus-method.c (dump_type_prefix): `const' and `volatile' were
- being put in the wrong places. Type like `const *const ...' were
- being dumped as `const const *...'.
-
- * cplus-decl2.c (finish_file): Don't try to initialize anything
- which has ERROR_MARK_NODE in its initializer.
-
- Thu Oct 12 02:41:34 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-init.c (resolve_member_ref): Catch case when we are in
- static member function context by reference is to (apparently)
- non-static member.
-
- * cplus-method.c (fndecl_as_string): Check PARMTYPES before
- chaining down, in case of syntax error.
-
- * cplus-init.c (do_friend): Take QUALS parameter. Needed for
- `grokclassfn'. Also take CTYPE instead of CNAME parameter.
- * cplus-decl.c (grokdeclarator): Caller changed.
-
- * cplus-init.c (do_friend): Set DECL_CONSTRUCTOR_P bit if we get a
- constructor.
-
- * cplus-tree.c (layout_basetypes): Don't allocate a virtual
- baseclass pointer if we can share one with a non-virtual
- baseclass.
-
- * tree.c (make_node): Build PARM_DECL nodes on the
- maybepermanent_obstack, not on the permanent_obstack.
-
- * cplus-typeck.c (build_unary_op): If addressing a reference and
- the reference is a variable, we need to check DECL_INITIAL, in
- case the variable is being initialized by a function call at top
- level.
-
- * cplus-decl.c (grokdeclarator): Be more careful when looking for
- function name when giving error that parameter list is random.
-
- * cplus-decl.c (grokdeclarator): Change handling of STATICP for
- member functions. Eliminate variable MEMFUNC_STATICP.
-
- * cplus-decl.c (init_decl_processing): Don't disable profiling
- anymore.
-
- Wed Oct 11 05:37:12 1989 Michael Tiemann (tiemann at arkesden)
-
- * c plus-except.c [_JBLEN]: More systems have more ways to fail to
- define this value. Implement yet another way to get it.
-
- * cplus-typeck.c (build_component_ref): Have to really check
- whether FIELD comes from a virtual baseclass.
-
- * cplus-init.c (is_aggr_typedef): Renamed
- `is_aggr_typedef_or_else' to `is_aggr_typedef', and gave it
- OR_ELSE parameter. All callers changed.
- * cplus-parse.y (member_init): Call `is_aggr_typedef' with zero
- value for OR_ELSE. We just want to know if the member looks like
- a virtual baseclass member or not.
-
- * cplus-method.c (build_decl_overload): Handle case where error
- has us building an overloaded name for something with a signature
- of X::f (...). That signature is technically erroneous, but can
- arise in the face of certain syntax errors.
-
- * cplus-lex.c (yylex): Handling of extern language strings was
- broken. If we were unlucky and got a file name string while
- reading a declaration, it could cause YYLVAL.TTYPE to contain the
- filename, rather than the type that was read in. Fixed by
- assigning to YYLVAL.TTYPE after checking for possible language
- string identifier.
-
- * cplus-init.c (build_new): We cannot expand `new' inside of base
- or member initializers, so instead put the expansion into an
- RTL_EXPR. CURRENT_VTABLE_DECL is ERROR_MARK_NODE in that case.
- * cplus-parse.y (.set_base_init): Set CURRENT_VTABLE_DECL to
- ERROR_MARK_NODE to indicate we are in initialization.
- * cplus-class.c (build_vfn_ref): Don't use cached vtable if
- calling function from base or member initializer.
-
- Tue Oct 10 22:47:47 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-typeck.c (unary_complex_lvalue): Can't take pointer to
- member through virtual baseclass.
- * cplus-typeck.c (convert_for_assignment): Same change.
-
- * stmt.c (assign_parms): Don't let BLKmode parameter get
- ``rounded'' off its word boundary...`access_parm_map' does not
- know what to do if that should happen for an inline function.
-
- * cplus-decl.c (grokdeclarator): Distinguish STATICP, which has
- roughly the usual `C' meaning, from MEMFUNC_STATICP, which means
- that the declaration is a static member function.
-
- Mon Oct 9 00:55:19 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-method.c (build_overload_name): Change naming scheme so
- that GNU calling convention (which passes objects in the stack) is
- distinct from cfront/PCC convention.
-
- * cplus-decl.c (push_overloaded_decl): Don't compare DECL_LANGUAGE
- of previously overloaded decl if it is not a FUNCTION_DECL.
-
- * cplus-decl.c (grokfndecl): Use parameter CHECK to control
- behavior of `grokclassfn' in non-constructor case (already used in
- constructor case).
-
- * cplus-class.c (finish_struct): Give warning if struct or union
- has no data members if PEDANTIC *or* EXTRA_WARNINGS.
-
- * cplus-typeck.c (convert_for_initialization): Don't forget to
- change TREE_READONLY VAR_DECLs into their constant initial value
- if they have one.
-
- * cplus-parse.y (.set_base_init): Change grammar to not go into
- error mode if a base initializer shows up for a non-member
- function. Otherwise, compiler will push binding levels (in
- `start_function' and `store_parm_decls') which it will not pop,
- leaving us not at global_bindings_p at function end.
-
- * cplus-class.c (ideal_candidate): In the event that there is no
- ideal candidate, restore PARMS by moving value from TREE_PURPOSE
- values back into the TREE_VALUE slots.
-
- Mon Oct 2 02:28:43 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-lex.c (cons_up_dtor_for_type): Call to `start_method'
- could yield VOID_TYPE_NODE in case of errors. Handle that.
- * cplus-class.c (finish_struct): Caller of `cons_up_dtor_for_type'
- changed.
-
- * cplus-decl.c (pushtag): Don't call `pushdecl' on for tags which
- are TREE_NONLOCAL.
- * cplus-class.c (pushclass): Set TREE_NONLOCAL before calling
- `pushtag'.
-
- Sun Oct 1 00:05:49 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-tree.h [DECL_VINDEX]: Change definition from being a
- FUNCTION_DECL to being a list of FUNCTION_DECLs, in the event that
- multiple baseclasses define the same virtual function. This only
- affects code where DECL_VINDEX was assumed to be a FUNCTION_DECL,
- namely in cplus-decl.c (grokfndecl) and cplus-class.c
- (add_virtual_function).
-
- * cplus-typeck.c (convert_for_initialization): If we are
- converting to an ARRAY_TYPE, don't call `default_conversion' on an
- initializer which is also of ARRAY_TYPE.
-
- * cplus-decl.c (finish_decl): If FIELD_DECL is of type ARRAY_TYPE
- that has not yet been laid out, we must go through the code which
- calls `complete_array_type' for TYPE and `layout_decl' for DECL.
-
- * cplus-init.c (expand_aggr_init_1): See whether initializer can
- go through a type-conversion operator rather than an X(X&)
- constructor, since wel will save one constructor that way. I.e.,
- trying to go through an X(X&) constructor may lead us to needing
- to go through a type-conversion operator, but the result of that
- conversion must still go through the original X(X&) constructor.
-
- * cplus-decl.c (finish_decl): For FUNCTION_DECLs with default
- argument, we build sub-FUNCTION_DECLs to catch calls to this
- function with fewer than the total number of arguments. We set
- TREE_USED of the sub-FUNCTION_DECLs to keep GNU C++ from
- complaining about the function being when compiling with -Wall.
- We also need to set TREE_ASM_WRITTEN and DECL_INITIAL of the
- function to really ensure that GNU C++ does not spuriously
- complain about these sun-FUNCTION_DECLs.
- * cplus-decl.c (grokdeclarator): Set TREE_PUBLIC of after calling
- `grokfndecl' on all paths.
-
- * cplus-typeck.c (build_function_call): Set TREE_USED for
- FUNCTION_DECL if TREE_INLINE is zero.
-
- * cplus-decl2.c (grok_enum_decls): Move to cplus-decl.c since it
- now needs access to `struct binding_level'.
- * cplus-decl.c (grok_enum_decls): When looking for class-local
- enum tags, warning if we find them in a class binding level other
- than the current one. It probably indicates a parse error in the
- file.
-
- * cplus-decl.c (lang_decode_option): Recognize new option
- -Wenum-clash, which gives warnings when enumeral types are
- used in suspect ways, such as assigning from one enumeral
- type to another.
-
- * cplus-typeck.c (message_2_types): Was previously called
- `error_2_types'. Now takes argument PFN which is pointer to
- the function which will actually print the message.
- * cplus-typeck.c (convert_for_assignment): Give error for
- passing incompatible enums only if pedantic. Otherwise, give
- warning.
-
- * cplus-init.c (finish_base_init): Add argument T which is the
- type for which the base initialization is being finalized. When
- finished initializing fields which come from anonymous unions,
- call `finish_base_init' on that anonymous union, which will unmark
- interesting fields recursively.
- * cplus-decl.c (finish_function): Caller changed.
-
- * cplus-method.c (hack_identifier): Permit calls through
- REFERENCE_TYPE fields which overload `operator ()'.
-
- * cplus-cvt.c (convert): Remove warning ``assignment to virtual
- aggregate type''.
-
- * cplus-decl.c (finish_decl): Make sure to destroy function-local
- static objects if they had been initialized. Set TREE_STATIC bit
- for elements of STATIC_AGGREGATES which are function-local
- objects.
- * cplus-decl2.c (finish_file): Rest of that implementation.
-
- Sat Sep 30 20:34:52 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-typeck.c (actualparameterlist): Don't let objects with
- operator= or X(X&) constructors be passing into `...'. If
- PEDANTIC, give error, otherwise, give warning.
-
- * cplus-typeck.c (convert_for_assignment): Get tougher on
- conversions to/from enumeral data types.
-
- * cplus-typeck.c (build_modify_expr): Make `operator=' an
- inheritable operator.
-
- * cplus-decl.c (push_overloaded_decl): Give error message if
- overloaded functions from different language contexts have the
- same type signature.
-
- * cplus-cvt.c (build_default_binary_type_conversion): If the types
- are not C++ types, then give error message saying that no type
- conversion operator exists. Call function `typedecl_for_tag' to
- get name for error message.
- * cplus-decl.c (typedecl_for_tag): New function. Return the
- TYPE_DECL (if any) assoicated with TAG.
-
- * cplus-class.c (build_functional_cast): Handle case where `A (B)'
- does not mean pass `B' to A's constructor, but rather call
- B.operator A ().
-
- * cplus-search.c (get_first_matching_virtual): If argument types
- differ only in their qualifiers, admit a match, but warn the user
- that this match was made.
-
- * cplus-lex.c (yyungetc): New function. Give parser routines the
- ability to adjust input tokens if initial lexing was a little bit
- wrong.
-
- * cplus-method.c (build_overload_name): Distinguish reference
- types from non-reference types.
-
- * cplus-typeck.c (process_init_constructor): Give error messages
- about types of objects which cannot be initialized from an
- initializer list.
-
- Wed Sep 27 00:22:16 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-class.c, cplus-init.c (various places): Handle cases that
- fields of struct are really local type declarations.
-
- * cplus-decl2.c (grokclassfn): Added new parameter CTYPE, in order
- to remove dependence on class name-class type equivalence. This
- was done for exception handling.
- * cplus-decl.c, cplus-init.c, cplus-except.c: All callers changed.
- * cplus-lex.c (cons_up_dtor_for_type): Added parameter NAME, for
- same reason.
- * cplus-class.c (finish_struct): Caller changed.
-
- * cplus-decl.c (duplicate_decls): If OLDDECL's type must change,
- remove OLDDECL from STATIC_AGGREGATES if it was there.
- * cplus-decl2.c (finish_file): Handle VARS being ERROR_MARK_NODE.
-
- * cplus-class.c (build_method_call): When calling `build_new',
- pass BASETYPE, not NAME, as the thing to be new'd.
-
- * cplus-parse.y (raise_identifiers): Permit qualified names, i.e.,
- `raises List::NotFound'.
- * cplus-decl.c (grokdeclarator): Handle nested exception scopes.
- * cplus-except.c (finish_exception_decl): Ditto.
- * cplus-class.c (build_method_call): Ditto.
-
- * cplus-except.c (init_exception_processing): Build in `setjmp'
- and `longjmp'.
-
- * cplus-except.c (expand_cplus_{start,end}_exception): If the
- exception object has elements which need cleanpus, call those
- cleanups after handling the exception.
-
- * cplus-except.c (finish_exception_decl): Set TYPE_HAS_CONSTRUCTOR
- bit, since call to `grokdeclarator' is subverted.
-
- * cplus-except.c (init_exception_processing): Size of `handler'
- field in built-in `ExceptionHandler' type was too big by one.
-
- * cplus-init.c (build_delete): Don't call non-virtual destructor
- with first argument of zero.
-
- * cplus-parse.y (except_stmts): Handle default exception as last
- exception (so that fall-through does the right thing). Also, give
- error message if multiple `default' clauses appear within an
- `except_stmt'.
-
- * cplus-decl.c (finish_decl): If a variable needs a cleanup, pass
- the cleanup to `expand_decl', whether or not that variable has RTL
- or not.
- * cplus-except.c (expand_start_try): Call `finish_decl' instead of
- `expand_aggr_init' to initialize the exception handler for the
- try. Otherwise, the exception handler's destructor will not be
- called at the end of the try.
-
- * cplus-decl.c (store_parm_decls): Don't call `__main' from `main'
- until after the parameters have been dealt with.
-
- Tue Sep 26 09:41:29 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-parse.y (stmt): Deal with case of TRY statement without
- corresponding EXCEPT clause.
-
- * cplus-decl.c (duplicate_decls): Don't call `compexcepttypes'
- until after calling `commontype', lest default parameters cause
- identical exception lists to look different.
-
- * cplus-except.c (end_exception_decl): New function clears
- exception declaration state.
- * cplus-parse.y (datadef): Call end_exception_decl when we are at
- the end of a declaration which could be an exception declaration.
-
- * cplus-class.c (modify_vtable_entry): Reenable stubbed out code
- which is used when baseclass is virtual.
- * cplus-class.c (finish_struct): When base class is virtual, check
- CLASSTYPE_VBASECLASSES using `value_member' instead of
- CLASSTYPE_ASSOC using `assoc_value'.
-
- * dbxout.c (dbxout_tags): Ensure that fully output types have
- their typedefs output as well. Needed to support -fminimal-debug.
-
- Sun Sep 24 11:22:41 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-method.c (report_type_mismatch): Don't tweak I if the
- function was FUNCTION_TYPE. Let TTF and TTA be advanced according
- to CP->U.BAD_ARG only.
-
- * expr.c (expand_expr): PROTECT argument missing in call to
- `expand_delete'.
- * cplus-init.c (build_delete): Call `convert_force' instead of
- `convert' if PROTECT is 0.
-
- * cplus-typeck2.c (digest_init): When initializing a RECORD_TYPE
- object, call `convert_for_initialization' as a last resort.
-
- * cplus-tree.c (build_exception_variant): Used TREE_CHAIN for look
- when should have used TYPE_NEXT_VARIANT.
-
- * cplus-decl.c ({start,finish}_decl): Handle decls which are
- CLASSTYPE_DECLARED_EXCEPTION. For `start_decl', nothing needs to
- be done. For `finish_decl', call `finish_exception_decl'.
-
- * cplus-except.c (finish_exception): When user defines an
- exception, make the compiler generate that exception's constructor
- automatically.
-
- * cplus-typeck.c (build_binary_op_nodefault): Associate
- (((a && b) && c) && d) to ((a && b) && (c && d)) to get better
- merging of component references when possible.
- * cplus-typeck2.c (merge_component_comparisons): Permit
- non-contiguous bitfield tests if bitfields are comparisons against
- integers.
-
- * cplus-tree.c (layout_basetypes): Give each basetype the
- alignment it wants.
-
- * cplus-lex.c (yylex): Recognize >?= and <?= operators (like +=
- for min and max operators).
-
- * cplus-decl.c (grokdeclarator): Set TREE_PUBLIC bit of
- FUNCTION_DECLs in FIELD_CONTEXT if they are !INLINEP.
-
- * cplus-decl.c (finish_function): Don't pay attention to
- `current_function_returns_null' when compiling constructors.
-
- Sat Sep 23 00:03:52 1989 Michael Tiemann (tiemann at arkesden)
-
- * stmt.c (assign_parms): Take care of case where parm arrives on
- the stack, but `__builtin_saveregs' might be called. In that
- case, get bits from stack into registers, so that
- `__builtin_saveregs' will not overwrite with garbage.
- * expr.c (expand_builtin): Modify expansion of BUILT_IN_SAVEREGS
- to protect stack args that need protecting.
-
- * cplus-decl.c (grokdeclarator): Never build a METHOD_TYPE if
- CTYPE is NULL_TREE. Was doing that when declaration of illegal
- construct ``virtual friend'' was parsed.
-
- * cplus-parse.y (do_array:): Don't try to call `build_array_ref'
- if $3 is ERROR_MARK_NODE (cuts down on spurious error messages).
-
- * cplus-decl.c (grokfndecl): Move setting of DECL_VIRTUAL_P bit to
- after we know whether the function is virtual. Remove setting
- CLASSTYPE_VSIZE. This will be set more accurately by
- `finish_struct'.
-
- Fri Sep 22 15:36:32 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-cvt.c (convert_to_pointer): PATH was reversed for
- computing nested virtual base accesses.
-
- * cplus-except.c (finish_exception): Call POPCLASS at end.
-
- * cplus-class.c (build_field_call): New function containing code
- broken out of `build_method_call'. Extended to grok calls through
- fields of exception objects which overload `operator()()', or are
- otherwise callable.
- * cplus-class.c (build_method_call): Now about 100 lines shorter.
-
- * cplus-decl.c (grokdeclarator): Take new argument RAISES
- specifying the exceptions that a function will raise.
- * cplus-decl.c (grokfield): Implement RAISES semantics by passing
- them to `grokdeclarator'.
-
- * cplus-decl.c (grok{fn,var}decl): Two new functions containing
- code broken out of `grokdeclarator'.
- * cplus-decl.c (grokdeclarator): Now about 250 lines shorter.
-
- Thu Sep 21 16:51:11 1989 Michael Tiemann (tiemann at arkesden)
-
- * cplus-search.c (get_vbase_types): Sort was totally broken.
- Completely rewritten.
-
- Wed Sep 20 00:47:36 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-decl2.c (finish_file): Change !defined(SDB_DEBUGGING_INFO)
- to defined(DBX_DEBUGGING_INFO).
-
- * cplus-class.c (finish_struct): Argument to `alloca' was off by
- 9.
-
- * cplus-init.c (build_new): If type requires alignment >
- BITS_PER_WORD (which is what ``__builtin_new'' is supposed to
- give), then get more space and round manually.
-
- Tue Sep 19 03:08:58 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-decl.c (finish_decl): Don't call `comptypes' if INIT is
- error_mark_node.
-
- * cplus-cvt.c (convert_to_reference): Set TREE_VOLATILE bit for
- assignment from one reference to another (for
- build_compound_expr).
-
- * cplus-decl2.c (finish_file): If we are compiling on Suns, bind
- local label ``_fini'' to static file cleanup function and
- ``_init'' to static file initialization function. STUBBED OUT FOR
- NOW.
-
- * cplus-parse.y: Put `type_quals' in 3rd operand position of a
- CALL_EXPR. Interface to `start_function', `start_method'
- and `grokfield' changed.
- * cplus-decl.c (grokdeclarator): Get QUALS from
- TREE_OPERAND (CALL_EXPR, 2). [n.b.: First operand is
- TREE_OPERAND (CALL_EXPR, 0)].
-
- * cplus-tree.h (TYPE_RAISES_EXCEPTIONS): For FUNCTION_TYPE and
- METHOD_TYPE, a list of the exceptions that may be raised.
- * cplus-decl.c (duplicate_decls): Remove assumption that
- TYPE_LANG_SPECIFIC implies that type IS_AGGR_TYPE.
-
- Mon Sep 18 14:08:02 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-class.c (add_virtual_function): If WRITE_VIRTUALS == 2,
- only set the TREE_ADDRESSABLE bit on a virtual function if the
- virtual function table is actually being output in this file.
- * cplus-decl.c (grokdeclarator): If WRITE_VIRTUALS == 2, make
- inline virtual functions TREE_PUBLIC if we are writing out this
- virtual function's virtual function table.
- * cplus-lex.c (reinit_parse_for_method): Don't clobber the above
- setting of TREE_PUBLIC for virtual functions.
-
- * cplus-lex.c: Process inline functions in declaration order.
-
- Sun Sep 17 01:46:14 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-declc. (grokdeclarator,start_method,start_function): Merge
- ``extern inline'' change.
-
- * cplus-typeck2.c (merge_component_comparisons): New function.
- Optimizes operations on contiguous component references provided
- that operations and alignments permit.
- * cplus-typeck2.c (make_merged_ref): Subroutine of above function
- to actually get the combined references.
-
- * cplus-typeck2.c: New file. Contains error-reporting
- functionality from cplus-typeck.c, and other functionality which
- could be easily moved out.
-
- * cplus-typeck.c (unary_complex_lvalue): Must test against
- {FUNCTION,METHOD,OFFSET}_TYPE before testing whether ARG is a
- MEMBER_REF. If the former holds, then we have an expression like
- X::Y. In the latter case, we have an expression like (X->*Y).
-
- Sat Sep 16 11:31:21 1989 Michael Tiemann (tiemann at teacake)
-
- * toplev.c (main): Recognize `+' options again.
-
- * cplus-decl.c (lang_decode_option): Implement `+e2' option, which
- writes out only virtual function tables specified in #pragma
- vtable.
- * cplus-decl2.c (finish_file): Implement semantics of `+e2'
- option.
- * cplus-lex.c (yylex): Recognize `#pragma vtable'.
-
- * cplus-decl2.c (finish_file): Charge time used against
- VARCONST_TIME, not PARSE_TIME.
-
- Thu Sep 14 18:04:10 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-init.c (build_new): If FLAG_THIS_IS_VARIABLE is non-zero,
- then generate call to constructor with zero as first argument.
- Otherwise, use `expand_aggr_init' to initialize the storage
- returned from whatever storage allocator was called.
- Initialization of virtual baseclasses simplified. Memory
- management made more complex (though more general) because we may
- have `new' expressions not being evaluated until `finish_file' is
- called.
- * cplus-decl2.c (finish_file): Handle a `new' expreesion at top
- level.
-
- * cplus-decl.c (finish_function): Change call from `build_x_new'
- to `build_new'.
- * cplus-init.c (build_x_new): Deleted.
-
- * cplus-init.c (build_new): Give error if arguments are given to a
- `new' expression for which no constructor is defined.
-
- * cplus-decl.c (decode_lang_option): Use option table from
- toplev.c to decode -f options.
-
- * cplus-method.c (flush_repeats,build_overload_name): Change
- naming convention to avoid ambiguous names if type index or number
- of repeats is more than nine.
-
- * cplus-except.c (init_exception_processing): Use <setjmp.h> to
- find length of setjmp buffer.
-
- Wed Sep 13 05:32:50 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-decl.c (start_method): Set TREE_INLINE bit if
- FLAG_DEFAULT_INLINE is nonzero.
- * cplus-decl.c (lang_decode_option): Recognize -fdefault-inline.
-
- * cplus-init.c (do_friend): Call `pushdecl_top_level' instead of
- `pushdecl'.
-
- * cplus-decl.c (start_method): Only need to copy node if it is not
- a friend.
- * cplus-decl.c (finish_method): In that case, return
- VOID_TYPE_NODE if the method was really a friend, but save it to
- CLASSTYPE_INLINE_FRIENDS so it can be processed properly later.
- It would be nice to have an obstack for this list so it could be
- freed at the end of this class's processing.
-
- Tue Sep 12 05:22:03 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-decl.c (start_function): Make C++ FUNCTION_DECL inherit
- DECL_ASSEMBLER_NAME from old C FUNCTION_DECL if their types are
- identical. This makes C<->C++ calls *much* easier to deal with.
-
- * cplus-decl.c (xref_tag): Don't set CLASSTYPE_DECLARED_CLASS bit
- if REF is CURRENT_CLASS_TYPE (??? or on the CURRENT_CLASS_STACK).
-
- * cplus-search.c (lookup_field_1): Give the user the virtual
- function table field if the name is `_vptr'.
- * cplus-decl2.c (grokfield): Don't let user declare anything with
- that name.
-
- * cplus-cvt.c (build_type_conversion): If we are trying to convert
- to type `void*' and no conversion to ptr_type_node exists, but a
- some other pointer conversion for TYPE exists, then convert to
- that pointer type, unless there is more than one such conversion,
- in which case return ERROR_MARK_NODE. The caller will emit an
- error message in that case. All callers changed.
- * cplus-cvt.c (convert_to_{integer,real,pointer}): Removed `saving
- throw' case which would try converting aggregate to a default type
- if requested conversion did not succeed. `build_type_conversion'
- knows how to perform such `saving throws'.
- * cplus-tree.h (lang_type): New field `ptr_type_conversion'.
- * cplus-decl.c (grokdeclarator): Record whether a type has a
- type conversion operator here.
- * cplus-class.c (finish_struct): Set up `ptr_type_conversion'.
- Also, don't need to trudge through all methods to find out there
- are no type conversion methods.
-
- Mon Sep 11 10:45:01 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-class.c (finish_struct): If we must cons up a destructor
- for a type, and METHOD_VEC was 0, set TREE_VEC_LENGTH (METHOD_VEC)
- to 1 after allocating METHOD_VEC.
-
- * cplus-class.c (finish_struct): Finish processing METHOD_VEC
- before making other calls out which may call `hash_tree_chain'.
-
- * cplus-class.c (finish_struct): Add BASE_LAYOUT_DECL to eliminate
- need for callback in stor-layout.c.
-
- * cplus-typeck.c (build_binary_op): Special case situation where
- we compare ARG1 with INTEGER_ZERO_NODE and ARG1 is of aggregate
- type. This is what comes from `truthvalue_conversion'.
-
- * cplus-cvt.c (build_type_conversion): New argument CODE says for
- what purpose the conversion is taking place. Important ones are
- truthvalue operations, which permit us to convert to different
- types then the ones we asked for. All callers changed.
- * cplus-cvt.c (build_default_{binary,unary}_type_conversion): Same
- change. All callers changed.
-
- * cplus-class.c (finish_{base_}struct): Set
- TYPE_NEEDS_CONSTRUCTING bits when basetype or member type needs
- constructing.
-
- * cplus-search.c (compute_visibility): Use TYPE_MAIN_VARIANT to
- see if field is public member of private baseclass.
-
- * cplus-init.c (expand_aggr_init_1): When bad arguments were
- passed to constructors for base initialization, only half the
- error message would appear.
-
- * Makefile: Remove dependencies on unexec.c and unex-addr.c.
-
- * cplus-decl.c (push_overloaded_decl): Can't use `value_member' to
- find previously declared function. Use DECL_NAME of function
- instead, since that must be unique (as a type signature/name
- combination).
-
- * cplus-lex.c (yylex): typo in assert macro.
- * cplus-cvt.c (convert_to_nonzero_pointer): Ditto
-
- * All GNU C++ files: implement initialized constant fields. Make
- them non-static, non-addressable VAR_DECLs.
-
- Sun Sep 10 09:19:22 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-method.c (build_opfncall): Remove METHOD_REF case.
- * tree.def: Remove definition of METHOD_REF.
-
- * cplus-decl.c (finish_decl): If a static member needs
- constructing, but it does not have an initializer, make it
- TREE_EXTERNAL.
- * cplus-decl2.c (grokfield): Set DECL_IN_AGGR_P before calling
- `finish_decl' for VAR_DECLs.
-
- * cplus-parse.y (forhead.2): New rule to keep GNU C++ gives better
- error handling when multiple variables are declared in the first
- part of a `for' stmt.
-
- * cplus-lex.c (finish_method): Handle case when `start_method'
- returns VOID_TYPE_NODE (two definitions of the same method in the
- same class.
-
- * cplus-decl.c (grok_op_properties): Make static operators (other
- than new and delete) trigger error messages. If operator new or
- delete has no arguments (due to syntax errors), rebuild their
- types. They have the right names, because `build_operator_fnname'
- knows how to do that.
-
- * stor-layout.c (make_{un}signed_type): Cache size nodes for
- pointers, functions, and methods.
- * stor-layout.c (layout_type): Use cached types.
-
- * cplus-decl{2}.c: Use `hash_tree_chain' instead of `tree_cons'
- where possible.
-
- * cplus-decl.c (expand_static_init): If variable has already been
- initialized, give complaint, but don't store the initializer.
- That way we don't have to preserve it on the temporary obstack.
-
- * cplus-parse.y (identifier_or_opname): Accept new C++ destructor
- syntax, which is effectively "scoped_identifier '~' identifier".
- * cplus-class.c (build_scoped_method_call): Accept calls using new
- C++ destructor syntax here.
- * cplus-class.c (build_method_call): Reject calls through here
- which don't use a leading `scoped_identifier'.
-
- * cplus-init.c (build_new): Don't permit arrays of `void'. Better
- error message emitted for newing `void'.
-
- * cplus-typeck.c (build_conditional_expr): Don't call
- `default_conversion' on the arms of the conditional if both are of
- the same enumeral type. Otherwise, if EXTRA_WARNINGS, give
- warning if enumeral type appears in either (or both) arm(s) of the
- conditional.
-
- * cplus-cvt.c (build_type_conversion): Don't convert from `int' to
- `void*'. Don't convert a `void*' to an `int'.
-
- * cplus-decl.c (xref_tag): If we get an old reference to a C
- struct name, and we are in C++ langauge context, give it a
- TYPE_DECL.
-
- * cplus-class.c (build_method_call): Don't call
- `default_conversion' on MEMBER_REFs because they might be enums.
- Instead, call `resolve_member_ref', and then if the type is
- something we would rather convert before calling
- compute_conversion_costs, convert that.
-
- * cplus-init.c: Set TREE_VOLATILE bit after all
- ``build (CALL_EXPR, ...)'' calls.
-
- * cplus-init.c (expand_vec_init): If at global binding level,
- return a TREE_VEC which contains the initialization parameters for
- the vector. `expand_vec_init' is no longer static.
- * cplus-decl.c (finish_decl): Handle INIT being result of
- `expand_vec_init' at top-level.
- * cplus-decl2.c (finish_file): Ditto.
-
- Sat Sep 9 12:44:48 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-class.c (finish_struct): Move error message about static
- members in unions from stor-layout.c to here.
-
- * varasm.c, stor-layout.c: Merged with GCC.
- * cplus-class.c (finish_struct): Use special FIELD_DECL in
- TYPE_FIELDS of T before calling `layout_type' to have effect of
- passing basetype layout information to `layout_record'.
-
- * cplus-typeck.c (build_c_cast): Typo in call to
- cleanup_after_call.
-
- Fri Sep 8 11:16:01 1989 Michael Tiemann (tiemann at teacake)
-
- * All GNU C++ files: replaced calls to `abort' with assertion
- macros where appropriate. Also removed some unneccessary tests
- against ERROR_MARK_NODE in various function calls.
-
- * cplus-lex.c (check_newline): Changed to take NEXTCHAR into
- account.
-
- Thu Sep 7 06:15:56 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-decl.c (store_parm_decls): Change where
- DECL_REFERENCE_SLOT is initialized. Eliminate a second loop
- through the parms.
-
- * cplus-method.c (hack_identifier): Don't need to test against
- FUNCTION_DECL before testing if the TREE_TYPE is REFERENCE_TYPE.
-
- * cplus-lex.c (yylex): If reading `0' or `1', return
- INTEGER_ZERO_NODE or INTEGER_ONE_NODE respectively.
- * cplus-decl.c (build_enumerator): If we got one of these two
- as a value, make a copy.
-
- * tree.c,cplus-lex.c,cplus-class.c,cplus-search.c
- [GATHER_STATISTICS]: Now only gather statistics if this macro is
- defined.
-
- * tree.c (make_node,build_int_2,tree_cons,build_tree_list): Merge
- Bryan Boreham's ``deluxe'' memory profiling code.
-
- * cplus-decl.c (finish_decl): Only complain about uninitialized
- refs and consts if there is no constructor for the type. If there
- is a constructor, then that constructor should say whether it did
- not initializer certain fields or not.
-
- * cplus-init.c (expand_aggr_init): When initializing, nothing is
- `const'.
-
- * cplus-decl.c (store_parm_decls): No need to call
- expand_decl_init on a PARM_DECL. In fact, now it is wrong.
-
- * tree.h: rearranged tree_decl layout and defined
- tree_function_decl type for FUNCTION_DECLs. Now space
- requirements for FUNCTION_DECLs do not impose on other kinds of
- _DECL nodes. Also, PARM_DECL nodes use less than a full decl
- node's worth of space.
- * toplev.c (rest_of_decl_compilation): Don't permit ASMSPEC to
- appliy to PARM_DECL nodes.
- * varasm.c (make_decl_rtl): Abort if called for a PARM_DECL node.
- * print-tree.c (dump): PARM_DECL nodes are not full.
- FUNCTION_DECL nodes have more fields then regular _DECLs now.
- * tree.c (make_node): Use TREE_CODE_LENGTH when allocating _DECL
- nodes. Also, don't set DECL_SOURCE_* for PARM_DECL nodes.
- Instead, set their DECL_CONTEXT to CURRENT_FUNCTION_DECL.
- * tree.c (build_decl): Don't set DECL_ASSEMBLER_NAME for PARM_DECL
- nodes.
- * cplus-decl.c (start_decl): Don't not push DECL if DECL is a
- PARM_DECL.
-
- * cplus-lex.c (yylex): Remove tests about whether we *really* saw
- a keyword or not. Instead, use `init_lex' to do most of the work
- for us (since lang_c's reserved word set is a subset of
- lang_cplusplus).
-
- * cplus-decl.c,cplus-decl2.c,cplus-typeck.c,cplus-class.c,
- cplus-lex.c, cplus-method.c: change tests of the form
- (TREE_VALUE (t) == void_type_node) to (t == void_list_node).
-
- * cplus-decl2.c (grokopexpr): Added argument CTYPE to help
- distinguish whether operators NEW and DELETE belong to a class, or
- are the global operators NEW and DELETE.
- * cplus-decl.c (grokdeclarator): Caller changed.
- * cplus-method.c (hack_operator): Caller changed.
-
- Wed Sep 6 10:29:45 1989 Michael Tiemann (tiemann at teacake)
-
- * dbxout.c (dbxout_type): Handle static member functions.
-
- * cplus-typeck.c (c_expand_return): Change test from
- TYPE_NEEDS_CONSTRUCTING to TYPE_NEEDS_CONSTRUCTOR to see whether
- `expand_aggr_init' must be called.
-
- * cplus-decl2.c (grokfield): Use `digest_init' to digest
- CONSTRUCTOR initializers of fields.
-
- * cplus-decl.c (grokdeclarator): Permit ARRAY_TYPE field decls to
- get their types from their initializer (if they were incomplete).
-
- * cplus-lex.c (build_operator_fnname): If there is more than one
- parameter to NEW_EXPR, then it is `__user_new'.
-
- * cplus-decl.c (store_parm_decls): Remove code to deal with case
- that function was declared without prototypes. It is never
- executed.
-
- * cplus-typeck.c (unary_complex_lvalue): Handle (x->*y) as an
- lvalue.
-
- * cplus-decl.c (start_decl): Put in check that temporary obstack
- starts out empty when we start parsing an initializer.
- * cplus-decl.c (expand_static_init): If the initializer was read
- into the temporary obstack, preserve all space that it used. I
- don't think it is safe to always read the initializer into the
- permanent_obstack and then free the space if it doesn't look
- interesting, because types may be created dynamically as a result
- of reading it in (such as array types), and we don't want them to
- get freed.
-
- * cplus-decl.c (finish_decl): Don't set DECL_ASSEMBLER_NAME of the
- decl to ASMSPEC if ASMSPEC is 0.
-
- * cplus-decl.c (finish_function): Set named_label_uses to
- NULL_TREE at end of function.
-
- Tue Sep 5 05:24:18 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-except.c: New file. Implements exception handling scheme
- designed by Michael Powell.
-
- * cplus-method.c (build_overload_name): Overload constructor names
- as '__' instead of whatever their original name was.
- * cplus-method.c (build_decl_overload): Distinguish constructors
- from other kinds of member functions.
- * cplus-decl2.c (grokclassfn): Call changed to
- `build_decl_overload' to take this into account.
-
- * cplus-decl.c (duplicate_decls): Don't crash if NEWDECL is a
- VAR_DECL, and there is an old VAR_DECL on the chain. Happens for
- strange parse errors.
-
- Mon Sep 4 01:36:07 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-decl2.c: New file. Contains functions which used to be
- defined in cplus-decl.c, but could be easily broken out. Also
- moved some functions out of cplus-tree.c which did not really
- belong there, but were put there to make compilation less painful.
-
- * cplus-class.c (build_method_call): Use ERR_NAME in more places
- when printing error messages.
-
- * cplus-decl.c (grokdeclarator): Special case NEW_EXPR and
- DELETE_EXPR when grokking an OP_IDENTIFIER. Make these guys
- static member functions. Callers in cplus-init.c changed.
- * cplus-tree.c (coerce_new_type,coerce_delete_type): Force the
- type of `operator new' and `operator delete' to wind up with the
- right types.
- * cplus-lex.c (build_operator_fnname): Handle `operator new' and
- `operator delete' correctly, warning when the wrong number of
- parameters show up.
-
- * expr.c (expand_expr): Add NEW_EXPR to the list of tree codes
- for which INIT_EXPR and MODIFY_EXPR don't need to deal with
- noncopied_parts.
-
- * cplus-class.c (finish_struct): Initialize TREE_PURPOSE of
- TYPE_NONCOPIED_PARTS to the virtual function table for the type.
-
- * cplus-cvt.c (build_type_conversion_1): Compiler was getting into
- infinite recursion when asked to convert something from its own
- type to its own type.
-
- * cplus-parse.y: Added RERAISE statement.
- * cplus-lex.c: Added __reraise keyword.
-
- * cplus-cvt.c (build_type_conversion): Build type conversions to
- type variants (i.e., given `operator char * ()', convert to a
- `const char *').
-
- * dbxout.c (dbxout_tags): Callback to language-specific files to
- see whether a type should actually be output.
- * dbxout.c (dbxout_symbol): Same change.
- * cplus-tree.c (lang_output_debug_info): New function.
- * cplus-decl.c (finish_function): Memoize information for
- lang_output_debug_info.
-
- * Merged latest changes from Bryan Boreham for incremental
- compilation via dumping.
-
- * cplus-parse.y: Recognize `::new' and `::delete'.
- * cplus-init.c (build_new): Handle `::new' by new interpretation
- of USER_PARMS. Only callers in cplus-parse.y needed changing.
- * cplus-init.c (build_{x_}delete): Handle `::delete' by accepting
- new argument USE_GLOBAL_DELETE. All callers changed.
-
- Sun Sep 3 12:42:38 1989 Michael Tiemann (tiemann at teacake)
-
- * expr.c (expand_cleanups_to): New function.
- * cplus-init.c (expand_cplus_expr_stmt): Call it after all is said
- and done.
-
- * expr.c (expand_expr): When encountering a NEW_EXPR, it is
- possible that the NEW_EXPR did not know (when it was built) what
- its cleanup needed to be. If its cleanup is 0, try building one
- if a new temporary was built for it.
-
- * cplus-decl.c (duplicate_decls): Warn if function type qualifiers
- don't match only if PEDANTIC (following change made by rms).
-
- * cplus-typeck.c (build_function_call): If pedantic, don't permit
- `main' to be called.
-
- * cplus-typeck.c (convert_for_assignment): Don't let ints
- convert to enums.
-
- * cplus-decl.c (start_function): Ensure that `main' is
- always declared to return an integer type.
- * cplus-decl.c (finish_function): Make it so that `main' always
- returns 0 by default.
-
- * cplus-decl.c (grokdeclarator): Make it now an error to specify
- return types for constructors and destructors.
-
- * cplus-typeck.c (comp_target_{parms,types}): Loosen up to permit
- contravariance violations, though not without warning.
-
- * cplus-method.c (build_overload_name): Change from old
- overloading scheme to one more or less compatible with type-safe
- linkage scheme proposed in Stroustrup's 1988 USENIX paper.
-
- Sat Sep 2 09:16:01 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-typeck.c (convert_for_initialization): Permit
- initialization of reference from incomplete type: that type will
- be converted to REFERENCE_TYPE, and that is just as good as a
- pointer to incomplete type.
-
- * cplus-decl.c (finish_decl): Handle case of static reference
- initialized from non-constant initializer. Break out code to
- initialize static variables as function `expand_static_init'.
-
- * cplus-decl.c (finish_decl): Don't call constructors on external
- variables.
-
- * integrate.c (copy_for_inline): Canonicalize PLUS expressions so
- that CONST_INTs appear on the right, and `FRAME_POINTER_RTX'
- and/or `ARG_POINTER_RTX' on the left.
- * integrate.c (copy_rtx_and_substitute): Take advantage of this
- fact and test fewer things while integrating.
-
- * cplus-typeck.c (c_expand_return): Try to get away with not
- issuing a call to `use_variable' for the DECL_RESULT of the
- function. If that fails, calling it only if
- `any_pending_cleanups' returns nonzero.
-
- * cplus-init.c (expand_recursive_init_1): Handle multi-demensional
- arrays which need constructing.
- * cplus-init.c (expand_vec_init): Handle multi-demensional arrays.
- Say sorry if we try to use an explicit initializer in that case,
- however.
-
- * cplus-parse.y: Permit the integer zero to be deleted (though who
- would want to?).
-
- * varasm.c (make_function_rtl): Replace call to lang_rtl_name with
- use of DECL_ASSEMBLER_NAME.
- * cplus-decl.c (lang_rtl_name): Removed.
-
- * cplus-decl.c (grokclassfn): Set DECL_ASSEMBLER_NAME after
- changing DECL_NAME.
- * cplus-init.c (do_friend): Ditto.
-
- * cplus-decl.c (start_function): If CURRENT_FUNCTION_DECL is a
- destructor, set up DESTRUCTOR_LABEL.
- * cplus-decl.c (finish_function): If DESTRUCTOR_LABEL is nonzero,
- expand just before calling base destructors.
- * cplus-typeck.c (c_expand_return): If DESTRUCTOR_LABEL is
- nonzero, jump there instead of just expanding the return.
-
- * collect.c (process): Change from
- (andrew%frip.wv.tek.com@relay.cs.net) to skip auxiliary entries.
-
- * All GNU C++ files merged from 1.35.97+ to 1.35.98.
-
- * cplus-decl.c (define_label): If a newly declared variable in the
- label's binding contour will need a cleanup, it must live in a new
- binding contour.
- * cplus-decl.c (define_case_label): New function. Same goes for
- case labels.
- * cplus-parse.y (stmt): Call `define_case_label' for CASE
- statements.
-
- * cplus-decl.c (lookup_label): Record in variable NAMED_LABEL_USES
- for each label the variables currently in scope at the use of the
- label.
- * cplus-decl.c (define_label): Give error message if jump to label
- crosses variable initialization in the current scope.
-
- * cplus-decl.c (struct binding_level): Change field
- `more_cleanups_ok' from char to bitfield. Added field
- `have_cleanups'. Change other fields to bitfields so that
- `struct binding_level' fits in 7 words, which can be
- malloc'd in total of 32 bytes.
- * cplus-decl.c (PUSH_BINDING_LEVEL,maybe_build_cleanup):
- Initialize and set field `have_cleanups'.
- * cplus-decl.c (expand_label): Set `more_cleanups_ok' to zero when
- we cross a label.
-
- * stmt.c (struct stack_block): Added field `initialized_decls_p'
- for blocks which need their decls expanded before used.
- * stmt.c (expand_decl{_init}): Set field initialized_decls_p when
- appropriate.
-
- Fri Sep 1 04:29:44 1989 Michael Tiemann (tiemann at teacake)
-
- * Exception handling constructs recognized (but nothing working).
-
- * cplus-decl.c (init_decl_processing): Call `set_identifier_size'
- with a length, not a number of bytes.
-
- * cplus-class.c (build_class_init_list): Braino.
-
- * cplus-init.c (expand_aggr_init_1): Reinitialize virtual base
- class virtual function tables if they are set to wrong values by
- their constructors.
- * cplus-init.c (expand_aggr_init): Initialize virtual base class
- virtual function tables if they are not set any other way.
-
- * cplus-class.c (finish_struct): Use CLASSTYPE_VSIZE instead of
- TYPE_VIRTUAL_P to determine whether a particular class has virtual
- functions which belong in its vtable. A type can be
- TYPE_VIRTUAL_P, meaning that *somewhere* it relies on virtual
- functions, but CLASSTYPE_VSIZE could be zero, meaning that it
- itself may not even have a virtual function table pointer.
- * cplus-decl.c (finish_file): Same changes.
- * cplus-decl.c (setup_vtbl_ptr): Same changes.
- * dbxout.c (dbxout_type): Same changes.
- * cplus-tree.c (layout_basetypes): Same changes.
-
- * cplus-class.c (finish_base_struct): Return 0 if all virtual
- functions come only from virtual baseclasses. Also, do not put
- into VFIELDS those fields which come from virtual baseclasses.
- * cplus-class.c (modify_vtable_entry): Instead, run through by
- hand the virtual baseclasses whose virtual function tables need to
- be modified. This means really using exactly the right
- associations for both base, context, and derived types.
- * cplus-class.c (prepare_fresh_vtable): Change parameter TYPE to
- CONTEXT_ASSSOC. All callers changed.
-
- Thu Aug 31 08:17:45 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-class.c (finish_struct): Test MAX_HAS_VIRTUAL, not
- HAS_VIRTUAL to assign TYPE_VIRTUAL_P (T).
-
- * integrate.c (save_for_inline): Add new variable
- PARM_INITIALIZATION which is nonzero during parameter
- initialization (either from the stack or registers).
- * integrate.c (copy_for_inline): Only zero TREE_READONLY of parm
- if PARM_INITIALIZATION is zero.
- * integrate.c (expand_inline_function): Back out Aug 30
- TREE_INLINE change for PARM_DECLs.
- * cplus-decl.c, cplus-typeck.c: Ditto.
-
- * cplus-decl.c (finish_decl): Take into account case where static
- variable must be initialized ``by hand''.
-
- * cplus-typeck.c (store_init_value): Return VALUE if
- initialization could not be trivially performed for static
- variable. Otherwise return NULL_TREE.
-
- * cplus-decl.c (get_temp_name): Add parameter STATICP. All
- callers changed.
-
- * integrate.c (copy_rtx_and_substitute): Significantly simplify
- PLUS and MEM case after finding out that code from tList.cc could
- break the complex cases on Sparc. Net effect: maybe more work for
- optimizer in later passes, and maybe more space occupied by inline
- insns during compilation.
-
- * expr.c (store_one_arg): Add test to see if we can avoid calling
- convert_units if possible.
-
- Wed Aug 30 04:01:15 1989 Michael Tiemann (tiemann at teacake)
-
- * toplev.c (main): Change +e[01] to -f+e[01], and move to
- lang_decode_option.
- * cplus-decl.c (lang_decode_option): Incorporate new flags.
-
- * integrate.c (copy_rtx_and_substitute): Don't build a SUBREG of a
- CONST_INT.
-
- * integrate.c (expand_inline_function): Change test of FORMAL from
- TREE_READONLY to TREE_INLINE.
- * cplus-typeck.c (build_modify_expr,build_unary_op): When
- modifying a PARM_DECL, set TREE_INLINE to 0.
- * cplus-decl.c (store_parm_decls): Set TREE_INLINE of PARM_DECL to
- 1.
-
- * cplus-decl.c (finish_function): When finishing constructors, if
- simple case holds (no cleanups), just store CURRENT_CLASS_DECL
- into the DECL_RESULT of FNDECL and fall through.
-
- * integrate.c (expand_inline_function): Don't emit
- NOTE_INSN_DELETED notes.
-
- * cplus-parse.y (compstmt): Only save binding contour information
- if there actually were decls.
-
- * cplus-decl.c (finish_file): Argument LINENO was missing in calls
- to finish_function.
-
- Tue Aug 29 23:03:17 1989 Michael Tiemann (tiemann at teacake)
-
- * cplus-typeck.c (unary_complex_lvalue): Treat INIT_EXPR like
- MODIFY_EXPR. Also, handle WITH_CLEANUP_EXPR case.
-
- * expr.c (expand_expr): Brainos in WITH_CLEANUP_EXPR case.
-
- * cplus-cvt.c (build_up_reference): Handle case where ARG is a
- WITH_CLEANUP_EXPR.
-
- * stmt.c (expand_function_end): *Don't* set REG_FUNCTION_VALUE_P.
-
- * tree.def [NEW_EXPR]: Change from 2 arguments to 3. Third
- argument, if non-NULL, is cleanup expression to run after the
- new'd expression is used. All users of NEW_EXPR changed.
-
- Sun Aug 27 01:13:09 1989 Michael Tiemann (tiemann at hobbes.ai.mit.edu)
-
- * stor-layout.c (layout_basetypes): Move from this file.
- * cplus-tree.c (layout_basetypes): To this one.
-
- * make-links.g++ (borrowed_files): typeclass.h is now a
- borrowed file.
-
- * cplus-decl.c (cleanup_after_call): New function.
- * cplus-typeck.c (build_compound_expr): Call it if neccesary.
- * cplus-typeck.c (build_c_cast): Ditto.
- * cplus-init.c (expand_cplus_expr_stmt): Ditto.
- * expr.c (expand_call): Remove code to allocate destructable stack
- slot if function return value is not used.
-
- * cplus-decl.c (init_decl_processing): `built_in_vec_delete' is
- NOT_BUILT_IN.
- * expr.c (expand_builtin): Don't try to expand EXPAND_VEC_DELETE.
-
- * cplus-init.c (build_vec_delete): Build the vector delete here;
- don't make a call to `__builtin_vec_delete'.
-
- * expr.c (expand_expr): Merge INIT_EXPR and MODIFY_EXPR.
- * expr.c (init_noncopied_parts): New function.
-
- * gcc.c: Merged completely. Use GCC from standard distribution.
-
- Sat Aug 26 10:38:14 1989 Michael Tiemann (tiemann at hobbes.ai.mit.edu)
-
- * cplus-typeck.c (build_binary_op): Perform type instantiation if
- necessary.
-
- * cplus-class.c (instantiate_type,build_instantiated_decl): Change
- "type instantiation" to "overload" in various error messages.
- * cplus-class.c (instantiate_type): Also fix error message to
- report overload resolution failure only if function has more than
- one type signature declared.
-
- * cplus-class.c (instantiate_type): Call `mark_addressable' on
- result of instantiating something for an ADDR_EXPR.
-
- * 1.35.96 to 1.35.97+ changes:
- * Makefile: Change name of `cplus-parse.tab.*' to `cplus-tab.*'.
- * cplus-lex.c: Change #includes to reflect this.
- * cplus-decl.c: All merged except CURRENT_EXTERN_INLINE.
- * toplev.c: Changes for extern inlines not merged.
-
- * cplus-decl.c (finish_file): Reset FNNAME from DECL_NAME of the
- current function, since `start_function' may cause it to change if
- overloaded. Also, push into C language context during the
- generation of file-level initializer/cleanup functions, since we
- don't want the extra-long names that overloading will give us.
-
- * cplus-decl.c,cplus-class.c,cplus-search.c: #include "obstack.h"
- instead of "cplus-obstack.h".
-
- * gnulib3.c: New file. Provides initialization and cleanup
- services for GNU C++. This should obviate the need for crt0.c.
- * crt1.c: Changed completely for new initialization/cleanup model.
- * cplus-decl.c (store_parm_decls): Put in special hooks to call
- `__main' from `main' for such purposes.
-
- Thu Aug 24 02:11:42 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-lex.c (check_newline): Only call unexec #ifndef
- DONT_HAVE_UNEXEC.
-
- * cplus-lex.c (reinit_parse_for_method)[USG]: If the buffer given
- to setvbuf is shorter than eight bytes long, setvbuf will (in
- violation of its man page) ignore the buffer and call malloc to
- get a bigger one. Fixed.
-
- * cplus-typeck.c (comp_target_types): Permit converting from a T**
- to a T** which has different qualifiers.
-
- * gcc.c (collect_spec): Changes for sun386.
- * collect.c: Ditto.
- * config.g++: Ditto.
-
- * cplus-parse.y (primary): Handle case where unfound
- identifier comes from base class during class declaration.
-
- * cplus-init.c (build_member_ref): Handle uses of class-local
- enums and static members before type is completed.
-
- * cplus-decl.c (pushdecl_class_level): Put enums and static
- members into class scope as soon as they are seen.
- * cplus-decl.c (poplevel_class): Make sure to take them out upon
- leaving scope.
-
- * cplus-lex.c (build_lang_field_decl): Take new argument CODE to
- say what kind of decl to build.
- * cplus-decl.c,cplus-parse.y: All callers changed.
- * cplus-decl.c (grok_enum_decls): Call `build_lang_field_decl'
- instead of `build_lang_decl'. Saves memory.
- * cplus-decl.c (grokdeclarator): Same change for VAR_DECLs local
- to structs.
-
- * cplus-typeck.c (build_modify_expr): Fix logic so that when
- assigning to `this', the error message about not being within a
- constructor or destructor is only emitted at the appropriate time.
-
- * cplus-tree.h [OPERATOR_NEW_FORMAT,OPERATOR_DELETE_FORMAT]:
- Define these.
- * cplus-method.c (build_opfncall): Use them.
-
- * cplus-tree.h [OPERATOR_MODIFY_FORMAT,OPERATOR_MODIFY_LENGTH,
- OPERATOR_CALL_FORMAT,OPERATOR_CALL_LENGTH,OPERATOR_ARRAY_FORMAT,
- OPERATOR_ARRAY_LENGTH]
- Define these.
- * cplus-decl.c (grok_op_properties): Use them.
- * cplus-init.c (add_friends): Ditto.
-
- * cplus-tree.h [VTBL_PTR_TYPE]: Define this.
- * cplus-decl.c (init_decl_processing): Use it.
-
- * cplus-tree.h [OPERATOR_METHOD_FORMAT,OPERATOR_METHOD_LENGTH]:
- Define these.
- * cplus-class.c (build_method_call): Use them.
-
- * cplus-class.c (compute_conversion_costs): Fix typo which would
- cause error message to be generated for calling a const member
- function with a non-const object.
-
- * Aug 24 03:10 g++.xtar.Z on ~ftp/pub
-
- * cplus-init.c (build_new): Braino involving -fthis-is-variable
- removed.
-
- Wed Aug 23 00:12:29 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-decl.c (finish_decl): Cannot forever remove READONLY
- attribute from decl needing initialization.
-
- * cplus-method.c (report_type_mismatch): Report error if calling
- non-const member function with const object.
-
- * cplus-class.c (convert_harshness,build_method_call): Finish
- implementing code to catch calls to non-const member functions
- with const objects.
-
- * cplus-class.c (build_method_call): No longer need to get to
- TYPE_MAIN_VARIANT for type information, such as TYPE_NEEDS_....
-
- * cplus-class.c (finish_struct): Set flags in all type variants.
- * cplus-parse.y (various places): Ditto.
-
- * integrate.c (expand_inline_function): No longer call abort if
- TREE_TYPE (arg) != TREE_TYPE (formal) for BLKmode parameter. This
- can happen when TREE_TYPE (formal) == ERROR_MARK_NODE.
-
- Tue Aug 22 09:06:32 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-class.c (ideal_candidate): Use `function' member instead
- of `u.field' member of candidates. The former is always properly
- set up, whereas the latter is set to 0 if the function used is a
- non-member function.
-
- * cplus-decl.c (groktypefield): Handle case where IDENTIFIER_NODE
- comes in which is not an aggregate type name.
-
- * cplus-method.c (hack_operator): Return ERROR_MARK_NODE if
- operator name is missing.
- * cplus-parse.y: Callers changed to deal with this.
-
- * cplus-search.c (various places): Most calls to
- `error_with_aggr_type' were wrong, leading to backward error
- messages (such as `member `A' not found for class `memfunc').
- Changed back to call `error' with appropriate parameters.
-
- * cplus-search.c (lookup_fnfields): Braino in printing error
- message: TREE_VALUE (entry) is a BASELINK (a TREE_LIST of
- TREE_LISTs), not a TREE_LIST.
-
- * cplus-decl.c (grokdeclarator): Handle missing operator name for
- for OP_IDENTIFIER case.
-
- * cplus-init.c (finish_base_init): If the vtable installed by the
- constructor was not the right one, fix after call to base
- constructor, before derived initialization.
-
- * cplus-decl.c (store_parm_decls): New parm PRESERVE is nonzero if
- we should preserve the data containing the function parameters.
- This is normally done for inline functions, but also needs to be
- done for constructors of classes which use virtual baseclasses.
- * cplus-decl.c (finish_function): Don't set DECL_ARGUMENTS (FNDECL)
- to zero if above condition holds.
- * cplus-decl.c, cplus-parse.y: all callers of store_parm_decls
- modified.
-
- * cplus-tree.c (hash_tree_chain): New function. Simplified
- version of hash_tree_cons.
- * cplus-parse.y (declmods): Use `hash_tree_chain' to build up
- lists which are not destroyed during parsing. They can be reused
- throughout the rest of the parse.
-
- Mon Aug 21 09:51:47 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-init.c (expand_aggr_init_1): Replace PARM_DECL rtl's with
- actual values to parameters.
-
- * cplus-init.c (expand_aggr_vbase_init): Only try initializing
- base classes here if FNDECL is nonzero.
- * cplus-init.c (expand_aggr_init_1): Try initializing them here in
- that case instead.
-
- * cplus-decl.c (finish_decl): We can initialize a const& from a
- const int, etc.
-
- * cplus-init.c (expand_vec_delete): Only warn about ignored array
- size expressions if EXTRA_WARNINGS.
-
- * cplus-init.c (build_new): Don't forget to allocate space for
- vectors.
-
- * cplus-init.c (add_friend): If the friend is not of METHOD_TYPE,
- set CTYPE = ERROR_MARK_NODE. This prevents false friend matches
- due to fact that `is_friend' assumes that if CURRENT_CLASS_TYPE ==
- TREE_PURPOSE (friends), that a class-match has occured.
-
- * stmt.c (expand_end_bindings): Don't let cleanups affect ({...})
- constructs.
-
- * cplus-decl.c (finish_decl): When initializing one reference from
- another, make sure that we wrap the initializer in a SAVE_EXPR if
- it is TREE_VOLATILE.
-
- * cplus-class.c (compute_conversion_costs): Check that FORMAL_TYPE
- is not ERROR_MARK_NODE.
-
- * tree.h (tree_type): Delete unused field `parse_info'.
-
- * cplus-decl.c (setup_vtbl_ptr): Add tests for OPTIMIZE and that
- CURRENT_FUNCTION_DECL is not DECL_STATIC_FUNCTION_P.
-
- Sun Aug 20 12:09:30 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-decl.c,cplus-typeck.c (various places): Check for
- CONST_DECL in addition to TREE_READONLY VAR_DECLs when needing
- constants for various purposes.
-
- Sat Aug 19 12:27:41 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-class.c (build_method_call): Handle case where
- INSTANCE_PTR is integer_zerop. This can happen with casts like
- { return ((Object*)0)->Object::IsA(); }
-
- Fri Aug 18 01:14:02 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-class.c (build_method_call): Complain about using abstract
- function only if INSTANCE is of known abstract type.
-
- * cplus-class.c (add_method): Don't crash if FIELDS is 0.
-
- * dbxout.c (dbxout_type): Don't crash if type only defines
- constructors and destructors.
-
- * cplus-typeck.c (build_component_ref): If METHOD_VEC is 0, break
- out of loop.
-
- * cplus-decl.c (finish_file): Don't abort if INIT is 0.
-
- Thu Aug 17 21:55:35 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-parse.y (LC): If the type we get left of a '{'
- !IS_AGGR_TYPE, then make a fake node which can hold our types for
- us.
-
- * cplus-init.c (do_friend): Argument missing in call to
- grokclassfn.
-
- * cplus-decl.c (poplevel): Only call `expand_end_bindings' if the
- level being popped needed an `expand_start_bindings' to get going.
- This only happens if the level is specifically to hold
- temporaries (i.e., when the KEEP field is < 0).
-
- * cplus-decl.c (finish_decl): Emit a sorry message if the _DECL
- needs constructing, and is not at toplevel.
-
- * cplus-class.c (build_method_call): Complain about incomplete
- types only if (FLAGS&LOOKUP_COMPLAIN).
-
- Wed Aug 16 17:11:22 1989 Michael Tiemann (tiemann at yahi)
-
- * toplev.c (compile_file), cplus-lex.c (yylex): Use setjmp/longjmp
- to communicate fact that dump was just performed. This prevents
- duplicate bytes being written to the asm file, due to inline
- functions being written out by both original and dumped compilers.
-
- * toplev.c (compile_file): Hack to make dumped compiler move bytes
- quickly from old asm file to new.
-
- * cplus-search.c (build_mi_virtuals,free_mi_matrix): Pointer
- arithmetic for mi_vmatrix accesses were off by 1.
-
- * cplus-class.c (build_method_call): Handle case where INSTANCE
- has a POINTER_TYPE type. This is when it is a dummy argument for
- `operator new ()'.
-
- Tue Aug 15 00:05:49 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-decl.c (grokclassfn): `const' member function information
- was being lost.
-
- * cplus-class.c (build_method_call): Generate error message when
- passing const objects to non-const member functions.
-
- * cplus-class.c (finish_struct): METHOD_VEC must track the object
- being grown on the class obstack.
-
- * cplus-method.c (dump_type{_prefix}): Print `class' instead of
- `struct' if declared as class.
-
- * cplus-method.c (build_{decl,typename}_overload,do_actual_overload,
- fndecl_as_string): Distinguish `const' member functions from
- normal member functions.
-
- * cplus-search.c (get_base_type): Distinguish whether we want to
- know if a public field of baseclass is protected, or whether a
- conversion from derived to base class is protected by passing
- either 1 or 2 to the argument PROTECT.
- * cplus-search.c (get_base_distance): If protect is non-zero,
- always emit an error message if conversion from derived to base
- class is across a private visibility boundary.
-
- * cplus-cvt.c (convert_to_reference): Don't violate visibility
- rules when converting to references. Add parameter PROTECT to
- control this behavior. All callers changed.
- * cplus-cvt.c (build_up_reference): Ditto.
-
- Mon Aug 14 00:03:46 1989 Michael Tiemann (tiemann at yahi)
-
- * stmt.c (expand_end_case): Incorporate rfg's bugfix for
- optimizing case statements with signed negative test term.
-
- * cplus-search.c (reinit_search_statistics): New function.
- * toplev.c (compile_file): Call that function if BEEN_HERE_BEFORE.
-
- * cplus-decl.c: Remove explicit initializations from static
- variables--let them sit in common rather than data space.
- * cplus-method.c: Ditto.
-
- * Makefile,toplev.v, cplus-decl.c, cplus-lex.c: Incorporated
- changes from Bryan Boreham <kewill!bryan@uunet.uu.net> to dump a
- running GNU C++ for later reexecing.
- * unexec.c,lastfile.c: borrowed from GNU Emacs
- * unex-addr.c,getpagesize.h: New files
-
- * Aug 14 13:07 g++.xtar.Z on ~ftp/pub
-
- * cplus-decl.c (finish_file): Handle case where initializer for
- one static aggregate is another. Do so by disabling code which
- assumed the wrong thing in that case.
-
- * cplus-search.c, cplus-tree.c, cplus-class.c: Major surgery on
- assoc lists. Virtual baseclasses are no longer represented in the
- main assoc list of a type. CLASSTYPE_VBASECLASSES already holds
- such information. Various functions changed and/or simplified to
- use value from that assoc list when needed.
-
- * cplus-decl.c (grokdeclarator): Don't get confused by
- non-storageclass bits in SPECBITS when DECL_CONTEXT == FIELD.
-
- * cplus-init.c (expand_aggr_init_1): Only check whether a new
- value has been assigned to `this' by the base class if
- FLAG_THIS_IS_VARIABLE is nonzero.
-
- * cplus-init.c (expand_aggr_init_1,build_new): Function
- `expand_aggr_vbase_init_1' was the wrong thing. Change these
- functions to call `expand_aggr_vbase_init' instead.
- Also, #ifdef'd out `expand_aggr_vbase_init_1'.
-
- * cplus-search.c: Move assoc code from here...
- * cplus-tree.c: ...to here.
-
- * cplus-decl.c (lang_printable_name): Don't print return type for
- constructors or destructors.
-
- * cplus-class.c (finish_struct): Set TYPE_NEEDS_CONSTRUCTING bit
- if any default members.
-
- * cplus-decl.c (finish_file): Remove test for
- TYPE_NEEDS_CONSTRUCTING when considering vars in
- STATIC_AGGREGATES. If something made it to this list, it should
- be initialized.
-
- Sun Aug 13 14:25:55 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-decl.c: Rename static variable GLOBAL_AGGREGATES to
- STATIC_AGGREGATES.
- * cplus-decl.c (finish_decl): Put static aggregates on the
- STATIC_AGGREGATES list if the VAR_DECL is TREE_STATIC. It does
- not have to be at the global_binding_level to get this treatment.
- Also, rename variable OLDGLOBAL to OLDSTATIC, and remove error
- messages which are no longer needed due to this change.
-
- * cplus-typeck.c (comptypes): Qualifiers must match. (Fix taken
- from GCC).
-
- * cplus-init.c (expand_aggr_{vbase}_init,expand_recursive_init):
- provide arguments INPUT_FILENAME and LINENO to
- `expand_asm_operands'.
- * cplus-search.c (init_vbase_pointers,build_vbase_vtables_init):
- Ditto.
-
- * cplus-class.c (push_lang_context): Don't set current_lang_name
- if it is not a name we recognize.
-
- * All GNU C++ files: Merged changes from 1.35.95 to 1.35.96.
-
- Sat Aug 12 00:27:43 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-decl.c (finish_function): Call use_variable on
- CURRENT_VTABLE_DECL if it is non-NULL.
-
- * cplus-decl.c (finish_decl): Call build_indirect_ref instead of
- building the INDIRECT_REF by hand when setting the decl reference
- slot.
-
- * cplus-obstack.h: New file. Defines obstack_int_grow and
- obstack_ptr_grow. Cuts many calls to bcopy.
- * cplus-class.c: Use cplus-obstack.h instead of obstack.h.
- * cplus-search.c: Ditto.
-
- * cplus-parse.y (aggr): Fix minor nits in error messages.
-
- * cplus-class.c (finish_struct): Removed code which redundantly
- called `finish_decl' on static class members.
-
- * cplus-decl.c (finish_decl): C++ 2.0 now permits static class
- members to be of types with constructors.
-
- * cplus-search.c (bfs_unmark_finished_struct): Don't call
- assoc_value if TYPE == CURRENT_CLASS_TYPE.
-
- * cplus-search.c (assoc_value): Call compiler_error if we have
- multiple baseclass hits. Also, make this function look for
- matches recursively. This saves having to flatten out the
- hierarchy all the time, saving storage.
-
- * cplus-init.c (expand_recursive_init_1): Take into account fact
- that there is no virtual function table initialization needed if
- CLASSTYPE_NEEDS_VIRTUAL_REINIT set TREE_VALUE (init_list) to
- NULL_TREE.
- * cplus-class.c (build_class_init_list): Set up init lists
- correctly if the derived class just takes virtual function table
- initialization from the base class.
-
- * cplus-init.c (finish_base_init): Unmark fields initialized which
- belong to base classes.
-
- * cplus-decl.c (grokdeclarator,duplicate_decls): Implement C++ 2.0
- interpretation of `const'.
-
- * Aug 12 08:33 g++.xtar.Z on ~ftp/pub
-
- * cplus-typeck.c (commontype): Case for REFERENCE_TYPE appeared to
- be missing.
- * cplus-typeck.c (comptypes): Ditto.
-
- * cplus-typeck.c (comp_target_parms): Braino caused this function
- to return after processing just the first argument!
-
- * cplus-typeck.c (comp_target_parms,compparms): Take
- contravariance into account for argument lists.
-
- Fri Aug 11 04:58:40 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-tree.c (list_hash): Implement hashing scheme for
- unchanging list nodes, such as compose TYPE_BASELINKS.
- Several new functions and data structures implement this.
- * cplus-search.c (get_baselinks): Call hash_tree_cons instead of
- tree_cons to get fresh nodes.
-
- * tree.c (init_tree): Remove call to bzero for hash_table.
-
- * cplus-init.c (expand_aggr_init): Typo in call to
- expand_vec_init.
-
- * newld.c (decode_command): Fix failure to bzero all entries in
- FILE_TABLE.
-
- * cplus-lex.c (cons_up_dtor_for_type): Add missing QUALS
- parameter in call to start_method.
-
- * cplus-decl.c (start_function): Set TREE_READONLY and
- TREE_VOLATILE bits of C_C_D.
- * cplus-class.c (popclass): Ditto.
-
- * cplus-tree.c (build_cplus_method_type): New function. Like
- `build_method_type', but permits qualifiers for the instance
- variable.
- * cplus-tree.h: Declare it.
- * cplus-decl.c (grokdeclarator,grokclassfn): Call this function
- instead of build_method_type.
-
- * tree.c (build_method_type): Set TYPE_METHOD_BASETYPE from the
- TYPE_MAIN_VARIANT of BASETYPE.
-
- * cplus-lex.c (gplus.input): Change `friend' from TYPE_QUAL to
- SCSPEC.
-
- * cplus-parse.y (fn.def1): Permit const and volatile member
- functions.
- * cplus-method.c (stash_inline_prefix): Handle case of const and/or
- volatile member functions declared inside class.
- * cplus-decl.c (start_{method,function}): Grok const and volatile
- member functions.
- * cplus-decl.c (grokdeclarator): New parameter QUALS.
-
- * cplus-typeck.c (readonly_warning_or_error): If ARG is a
- PARM_DECL, print its name. Also, if the message is due to the
- underlying structure of a COMPONENT_REF, tell user the
- member name instead of trying to hunt down the structure name.
- also, if ARG is a reference variable or parameter, name the
- reference as well.
-
- * cplus-cvt.c (build_up_reference): Handle case where we build a
- reference to a sub-object of an object which uses multiple
- inheritance.
-
- * cplus-class.c (finish_struct): Simplify conditions under which
- CLASSTYPE_NEEDS_VIRTUAL_REINIT is used, and use it.
-
- Thu Aug 10 00:13:03 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-parse.y (member_init): If base class is virtual, save the
- intializer on the permanent_obstack.
-
- * cplus-init.c (expand_aggr_vbase_init_1): New function. Called
- to actually walk the virtual baseclass initialization list.
-
- * cplus-init.c (expand_aggr_vbase_init): New argument DECL is
- the FUNCTION_DECL for the constructor by which this object is
- initialized. From that constructor comes the virtual base class
- initialization list.
-
- * cplus-init.c (finish_base_init): Store initializers for virtual
- base classes.
-
- * cplus-tree.h (lang_decl): Add new field `vbase_init_list'.
- Holds initializers for virtual base classes.
-
- * cplus-init.c (build_new): Arrange to initialize virtual
- baseclasses before calling constructor if FLAG_THIS_IS_VARIABLE
- is zero. Otherwise, constructor will call it on allocation.
-
- * cplus-cvt.c (convert_to_nonzero_pointer): If EXPR is already
- of type TYPE, don't build a NOP_EXPR; instead, just return
- EXPR.
-
- * cplus-class.c (build_method_call): If INSTANCE is NULL_TREE,
- then pre-allocate storage for the constructor. After that, if
- there are virtual baseclasses to initialize, initialize them right
- away. Then call constructor with resulting argument.
-
- * cplus-decl.c (flag_this_is_variable): Change default from 1 to 0.
- * cplus-decl.c (lang_decode_option): Recognize
- `-fthis-is-variable' on command line.
- * cplus-decl.c (finish_function): Don't emit test for whether `this'
- is zero if FLAG_THIS_IS_VARIABLE is zero. Check both constructor
- and destructor case.
- * cplus-decl.c (grokclassfn): Make `this' a *const if
- !FLAG_THIS_IS_VARIABLE.
-
- * cplus-search.c (build_mi_matrix): Initialize MI_SIZE when
- reusing an old mi-matrix.
-
- * cplus-cvt.c (convert_to_nonzero_pointer): Abort if argument is
- integer_zerop.
-
- * cplus-class.c (build_method_call): Simplify code, mostly for
- speed.
-
- * cplus-search.c (lookup_field): Use my_tree_cons instead of
- tree_cons for looking up fields.
-
- * cplus-search.c (my_{tree_cons,build_string}): Use SET_TREE_CODE
- to set tree code.
-
- * cplus-decl.c (finish_decl): Initialize globals whose type needs
- constructing, but ! IS_AGGR_TYPE (type), with empty_init_node to
- keep assemble_variable from crashing.
-
- * cplus-search.c (build_mi_matrix): Take into account
- CLASSTYPE_N_VBASECLASSES when computing MI_SIZE.
- * cplus-class.c (finish_struct): Braino: set
- CLASSTYPE_N_VBASECLASSES after calling layout_vbasetypes.
-
- * cplus-class.c (finish_base_struct): Set MAX_HAS_VIRTUAL
- regardless of whether base class is a virtual baseclass or not.
- * cplus-class.c (finish_struct): Also, set MAX_HAS_VIRTUAL
- taking into account virtual baseclasses.
- * cplus-tree.c (layout_vbasetypes): Takes new arg PMAX which
- passes info of maximum number of virtual functions defined in
- virtual baseclasses from this function to finish_struct.
-
- * cplus-class.c (finish_struct): Set MAX_HAS_VIRTUAL if
- HAS_VIRTUAL is set.
-
- * cplus-class.c (modify_vtable_entry): If VFIELD can be
- NULL_TREE, if the current class has no virtual function except
- those inherited from a virtual baseclass. In such a case,
- NORMAL will be zero.
-
- * cplus-lex.c (copy_type_lang_specific): Copy the array of
- basetypes so that CLASSTYPE_BASECLASS (t, i) gives the right
- baseclass.
-
- Wed Aug 9 10:41:17 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-typeck.c (c_expand_return): Don't pass return value though
- a temporary if there are no pending cleanups.
- * stmt.c (no_pending_cleanups): New function to support above
- change.
-
- * stmt.c (assign_parms): Add test to see if we can avoid calling
- convert_units if possible.
-
- * cplus-decl.c (grokparms): Use variables LAST_RESULT and
- LAST_DECL to eliminate need to call `chainon'.
-
- * stmt.c (expand_fixup,expand_start_bindings): Use static variable
- EMPTY_CLEANUP_LIST to short-circuit cleanup checking, and also
- cut down on calls to tree_cons, in new binding contours, which are
- quite frequent in C++ (20% of calls to tree_cons, and 5% of total
- TREE_LIST nodes).
-
- * stmt.c (expand_start_*): Build new nesting level structure on
- obstack instead of calling malloc. New variable STMT_OBSTACK.
- New function `init_stmt'.
- * toplev.c: Call `init_stmt'.
-
- * obstack.h (obstack_{ptr,int}_grow): New macros.
-
- * cplus-cvt.c (build_default_{binary,unary}_type_conversion):
- Handle case where one (or both) incoming types are "C" types, not
- "C++" types.
-
- * cplus-cvt.c (convert_to_pointer): If we go through any virtual
- base pointers, make sure that casts to BASETYPE from the last
- virtual base class use the right value for BASETYPE.
-
- * cplus-search.c (dfs_find_vbases): VBASES are now TREE_VECs,
- not TREE_LISTS. Change variable named OFFSET_INFO to ASSOC,
- and use accordingly.
-
- * cplus-search.c (dfs_get_vbase_types): Make assocs in VBASE_TYPES
- contain the true basetype, not its MAIN_VARIANT.
-
- Tue Aug 8 00:19:43 1989 Michael Tiemann (tiemann at yahi)
-
- * stor-layout.c (layout_basetypes): Don't inherit assoc info.
- Synthesize it instead.
-
- * cplus-class.c (finish_struct): Reenable code which fills in
- virtual function tables of virtual baseclasses.
-
- * cplus-class.c (finish_struct): Fill in virtual function table
- with values which come from virtual or non-leftmost baseclasses.
- These are not filled in correctly by `modify_vtable_entry', which
- for these cases, only correctly allocates their skeleton.
-
- * cplus-class.c (modify_vtable_entry): Only call get_base_distance
- when BASE != CONTEXT.
-
- * cplus-search.c (get_base_distance): Don't push a search_stack
- level until we know we need it and will use it.
-
- * cplus-class.c (modify_vtable_entry): Once we know what vtable is
- of interest, set BASE to the best approximation of T's vtable we
- know. I.e., set it to the vtable for the immediate super-class of
- T.
-
- Mon Aug 7 17:12:31 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-class.c (finish_struct): When extending the bounds of the
- virtaul function table, keep VFIELDS as it was; don't move it up
- the inheritance tree.
-
- * cplus-class.c (finish_struct): No need to allocate a lang_decl
- for the virtual function table pointer FIELD_DECL. Others need
- bits, but not bytes that FUNCTION_DECLs need.
-
- * cplus-init.c (build_virtual_init): For now, assume that FOR_TYPE
- and TYPE may be distinct, so use assoc lists to find the right
- vtable.
-
- * cplus-init.c (expand_recursive_init_1): Initialize the virtual
- function table of sub-components of aggregates driven by
- sub-component. Otherwise, we have to initialize the virtual
- function table driven by the caller who knows what sub-components
- must be initialized. Question: will this cause multiple
- initialization of vtables which are not down the left-hand side?
- Answer is probably yes.
-
- * tree.c (make_tree_vec): New function.
-
- * tree.c (copy_node): Now handles TREE_VEC correctly.
-
- * cplus-search.c ({make,copy}_assoc,assoc_value,debug_dump_assoc):
- Change representation of assoc list from TREE_LIST to TREE_VEC
- representation.
- * cplus-tree.h (ASSOC_* macros): Also here.
-
- * cplus-typeck.c (process_init_constructor): Don't complain about
- non-initialization of static class members, regardless of whether
- they are in global scope or not. (Previously only complained when
- at global scope.)
-
- * cplus-class.c (finish_struct): Allocate method_vec if members
- need destructors.
-
- Sun Aug 6 10:23:31 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-class.c (finish_struct): Eliminate redundant
- initialization of class fields to 0.
-
- * cplus-parse.y (parm rules): Use void_list_node instead of
- build_tree_list (NULL_TREE, void_type_node) where possible.
-
- * print-tree.c (dump): Handle TREE_VEC case.
-
- * cplus-init.c (add_method): Modified, and moved to cplus-class.c.
-
- * cplus-tree.h (lang_type): Change representation of list of
- member functions from list of lists to vector of lists.
- * cplus-class.c (finish_struct,build_method_call): Also here.
- * cplus-method.c (do_inline_function_hair): Also here.
- * cplus-decl.c (grokclassfn): Also here.
- * cplus-init.c (build_delete,build_member_ref): Also here
- * cplus-ptree.c (walk_lang_type): Also here.
- * cplus-search.c (lookup_fnfields{_1},get_baselinks,dfs_pushdecls,
- dfs_compress_decls,dfs_popdecls): Also here.
- * cplus-typeck.c (build_component_ref): Also here.
- * dbxout.c (dbxout_type): Also here.
-
- * cplus-class.c (build_method_call): Remove vestigal use of
- OVERLOAD_MAX_LEN.
-
- Sat Aug 5 09:49:48 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-decl.c (grokparms): Reuse TREE_LIST node in usual case of
- parameter processing.
-
- * cplus-decl.c (init_decl_processing): Do things here which used
- to be done in toplev.c
- * toplev.c (various places): Merge with GCC.
-
- Fri Aug 4 17:47:24 1989 Michael Tiemann (tiemann at yahi)
-
- * stor-layout.c (genop): Avoid creating new nodes when old ones
- will do.
- * stor-layout.c (build_int): Cache sizes we have made for types.
-
- Thu Aug 3 21:44:04 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-decl.c (pushdecl): Canonicalize enum typedefs same as
- struct, class, and unions.
-
- * cplus-init.c (resolve_member_ref): When member is of
- METHOD_TYPE, return logical address of the member, not the member
- itself. The member itself has type METHOD_TYPE, which has mode
- EPmode, which is not a valid mode for expand_expr.
-
- * cplus-init.c (expand_vec_delete): When calling vector delete on
- store which does not need destructors, just ignore the argument,
- and delete the container (array) instead.
-
- * cplus-decl.c (start_function): Handle case where OLDDECL comes
- back as a TREE_LIST.
-
- Wed Aug 2 10:54:54 1989 Michael Tiemann (tiemann at yahi)
-
- * collect.c (process): Initialize ldptr to NULL if COFF is defined.
-
- * cplus-method.c (stash_inline_prefix): String name of function is
- IDENTIFIER_POINTER (DECL_NAME (...)), not DECL_NAME.
-
- Mon Jul 31 12:14:35 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-decl.c (finish_decl): Handle case where INIT can be a
- TREE_LIST when initializing a named return value. Specifically,
- translate a TREE_LIST into a COMPOUND_EXPR when initializing a
- referece.
-
- * toplev.c (compile_file): Gripe about *non*-extern functions
- declared static but not defined.
-
- * cplus-init.c (build_delete): Keep ADDR parameter from being
- evaluated multiple times if TREE_VOLATILE.
-
- * cplus-decl.c (grok_function_init): Note whether DECL is an
- uninheritable virtual (i.e., a virtual function of an "abstract
- class").
- * cplus-tree.h (lang_decl): Add bit to record above info.
- * cplus-class.c (build_method_call): Give error if compiler can
- detect that user is attempting to call this function for an object
- whose type is that of the "abstract class".
-
- * gcc.c (link_spec): Make libg++.a available via %s rather than
- from -lg++.
-
- Fri Jul 28 00:22:14 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-typeck.c (comp_target_types): Take contravariance into
- account for OFFSET_TYPE.
-
- * cplus-decl.c (grokdeclarator): When declaring an array, always
- call suspend momentary, since the TYPE_DOMAIN of the array may be
- needed later, for instance by expand_vec_delete.
- * cplus-parse.y (nonmomentary_expr): Second change needed to
- ensure that above condition is met.
-
- * cplus-decl.c (grokdeclarator): Handle case of derived class
- declaring member function static when derived class declared
- member function virtual.
-
- * cplus-decl.c (grokparms): Permit functions which have default
- arguments to end with `...'.
- cplus-typeck.c (actualparameterlist): Handle this new case.
-
- * cplus-typeck.c (c_expand_return): Handle case where conversion
- to return type of function returns ERROR_MARK_NODE.
-
- * cplus-init.c (build_delete): Handle case where member type is
- ARRAY_TYPE.
-
- * cplus-parse.y (component_decl): Handle case of missing ';'
- before '}'.
-
- * cplus-typeck.c (c_expand_start_case): Handle case where switch
- quantity is a MEMBER_REF.
-
- * cplus-method.c (build_component_type_expr): Handle case of
- calling non-virtual type conversion operators.
-
- * cplus-decl.c (shadow_tag): Make permanent any type created here.
-
- * gcc.c (struct compiler compilers[]): add -D__GNUC__ to files
- which are compiled using GNU C++.
-
- * cplus-parse.y (primary <- IDENTIFIER): If the identifier is a
- class-local enumeral value, check visibility--it may be a private
- member of a base class.
-
- * cplus-cvt.c (convert_force): New function. Permit conversion from
- sub-type to private super-type.
- * cplus-typeck.c (build_c_cast): Call convert_force instead of
- convert.
-
- * cplus-typeck.c (build_x_function_call): Don't crash if asked to
- resolve a function which has been declared overloaded, but does
- not yet have any signatures.
-
- * cplus-class.c (finish_decl): Don't crash when warning (or
- flagging as error) that array types in static objects cannot need
- constructors.
-
- Thu Jul 27 02:26:27 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-tree.c (build_cplus_array_type): Make array type permanent
- if ELT_TYPE is permanent. This is needed because the array type
- may exist within an inline function, and that inline function may
- be expanded at any future time.
-
- * cplus-typeck.c (build_scoped_ref): Typo caused fn call to have
- virtually no effect.
-
- * cplus-init.c (expand_recursive_init): Make usage of global
- INIT_PTR reentrant.
-
- * cplus-search.c (dfs_pushdecls): Don't try initializing a
- TYPE_DECL, just continue through it.
-
- * integrate.c (access_parm_map): Don't compensate for
- BYTES_BIG_ENDIAN if parm is BLKmode.
-
- * stmt.c (various places): Make stmt.c agree much more closely
- with GCC's stmt.c. Now only a few places where there are
- differences. These have to do with calling do_pending_adjust
- before running cleanups, and using `lang_printable_name' instead
- of DECL_PRINT_NAME to assign to `current_function_name'.
-
- Wed Jul 26 15:04:45 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-decl.c (finish_decl): If decl is static, but initialized
- by non-static initializer (such as an object initialized by a
- constructor), use a special initializer to make the decl lay down
- in data rather than bss space.
- * varasm.c (assemble_variable): Remove C++-specific code for above
- case.
-
- Tue Jul 25 13:10:19 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-class.c (modify_vtable_entry): If the base fndecl is
- not contained in the vtable, don't try to modify the vtable.
- This automatically includes virtual functions from virtual base
- classes.
- * cplus-class.c (modify_vtable_entry): If the virtual function
- does come from a virtual base class, remember to change its
- DECL_VINDEX from a FUNCTION_DECL to an INTEGER_CST before
- continuing with the loop. Use the DECL_VINDEX of the base
- FUNCTION_DECL.
-
- * cplus-search.c (debug_dump_assoc): New function.
-
- Mon Jul 24 11:22:50 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-class.c (finish_struct): Break out code to initialize a
- struct with information deriving from its base classes.
- * cplus-class.c (finish_base_struct): New function where that code
- now lives.
-
- * cplus-search.c (dfs_get_vbase_types): Make full association
- list; Don't do so only when TREE_VIRTUAL bit is set.
-
- Sun Jul 23 20:31:57 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-class.c (modify_vtable_entry): Braino caused base
- association to overwrite derived associate, causing base
- virtual functions to appear in derived virtual function tables
- when they shouldn't have.
-
- Sat Jul 22 14:48:51 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-lex.c (yylex): Characters are of type `char'
- * cplus-decl.c (lang_decode_option): No longer a need for
- flag_char_charconst.
- * flags.h: ditto.
-
- * All GNU C++ files: Merged changes from 1.35 to 1.35.95.
-
- Thu May 25 02:56:16 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-init.c (expand_aggr_init_1): make sure to emit error
- message when following an error path.
-
- * stor-layout.c (layout_decl): call this function instead of
- cplus_size_in_bytes. This saves many calls to `convert_units'.
-
- * cplus-typeck.c (cplus_size): new function, just returns the size
- of the type we are interested in (no units conversion is done).
-
- * cplus-decl.c (init_decl_processing): preallocate
- IDENTIFIER_NODES for `this' and `__delete_me__'; saves calls to
- get_identifier.
-
- * cplus-parse.y, cplus-lex.c: tried to speed things up. Removed
- vestigial `@' construct from cplus-parse.y. Also parse '(' ')'
- as a single token.
-
- * cplus-init.c (add_friend): make sure to return void_type_node if
- we want our callers not to see anything. Also, undo having set
- TREE_GETS_{NEW,DELETE} if the friend we get is global operator new or
- global operator delete.
-
- Tue May 23 01:10:51 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-typeck.c (build_modify_expr): Recursive memberwise
- assignment must work on all type variants, not just the main
- variant. Otherwise, we can't assign a const B& to a B&.
-
- * cplus-cvt.c (convert_to_pointer): convert to virtual baseclasses
- through virtual baseclass pointers. Also, give error if
- converting up from a virtual baseclass type.
-
- Mon May 22 22:03:24 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-class.c (finish_struct): remember to give dynamic classes
- a vfield even if they don't define virtual functions (-fSOS).
-
- * cplus-decl.c (init_decl_processing): fixed typo: TYPE_POINTER_TO
- does not build a pointer type, but build_pointer_type does.
-
- * cplus-decl.c, cplus-init.c: allow builtin functions to be
- declared friends.
-
- * cplus-class.c (ideal_candidate): if the best candidates require
- user-defined type conversions, don't reject as ambiguous the
- case where one candidate comes from one class, and the other
- candidates come from base classes of that class.
-
- * stor-layout.c (layout_type): after laying out a type, make sure
- that all type variants get the type's size.
-
- Fri May 19 13:20:07 1989 Michael Tiemann (tiemann at yahi)
-
- * cplus-class.c (popclass): don't kill out prev_class_type's decls
- if not at the global binding level.
-
- * cplus-decl.c: added new field `class_shadowed', which may some
- day be used to implement nested clases.
-
- * newld.c (various places): round up size to double word boundary
- if defined(sparc) || defined(sun).
-
- * tree.c (lvalue_p): A CALL_EXPR is an lvalue if the return type
- is an addressable type.
-
- * cplus-init.c (make_friend_class): fix typo in error message.
-
- * cplus-class.c (finish_struct): Don't give error message if class
- is does not define virtual functions which must be defined if
- that class has some of its own.
-
- * cplus-class.c (instantiate_type): handle case where user
- requests member function using object, i.e., `x.f'. If f is
- virtual, return the function found in the virtual function table.
-
- * stor-layout.c (layout_basetypes): language dependent code
- removed, put in cplus-class.c
-
- * stmt.c (expand_goto_internal, expand_end_bindings,
- fixup_cleanups): if cleanups were called on leaving a binding
- contour, and EXIT_IGNORE_STACK is not defined, call
- do_pending_stack_adjust.
-
- * gcc.c: recognize ".cxx" as a C++ file name extension.
-
- * cplus-typeck.c (convert_for_initialization,
- convert_for_assignment): convert MEMBER_REFs, if possible, to
- members or component refs as appropriate.
-
- * cplus-typeck.c (build_member_ref): recognize member refs which
- are not associated with any object in particular (i.e., could
- be, but need not be `this').
-
- * cplus-search.c (get_vbase_types): orders the virtual base
- classes so that initialization and anti-initialization are
- performed in correct order. A virtual baseclass is not
- destroyed until all parts of the object which could be using
- that virtual base class are destroyed.
-
- * cplus-parse.y: call build_vbase_delete if appropriate.
-
- * cplus-init.c (expand_delete): call build_vbase_delete if
- appropriate. No longer deletes parts of objects via virtual
- base classes.
-
- * cplus-init.c: new function build_vbase_delete, performs
- destructors on objects with virtual base classes. new function
- build_x_delete calls free-store deallocator on objects without
- running destructors.
-
- * cplus-decl.c (pushdecl, shadow_tag, and xref_tag): implement
- C-like behavior in "C" language scope vis a vis type
- declarations.
-
- * cplus-decl.c: define macros PUSH_BINDING_LEVEL and
- POP_BINDING_LEVEL. Use these macros where appropriate. Fixed
- bug in popping binding contours in the presence of syntax
- errors.
-
- * README, config.g++, make-links.g++: fixed minor glitches
-
- Wed May 17 20:34:29 1989 Michael Tiemann (tiemann at yahi)
-
- * stor-layout.c: move code which deletes an incomplete base type
- to cplus-class.c.
-
- * cplus-class.c (finish_struct): call `propagate_basetype_offsets'.
-
- * cplus-class.c: new function `propagate_basetype_offsets' gives
- correct offsets to base types which are not immediate base types
- in a multiple inheritance lattice.
-
- Tue May 16 09:40:00 1989 Michael Tiemann (tiemann at yahi)
-
- * Started using ChangeLog for version 1.35.0
-
-
-